在 Shell 脚本中,双引号 (") 和单引号 (') 都用于引用字符串,但它们的解析机制有所不同。
双引号 (")
使用双引号包围的字符串会保留大多数字符的字面意义,但允许以下字符在引号内进行解析:
变量替换:如 $VAR、${VAR}。
命令替换:如 $(command)、`command`。
算术替换:如 $((expression))。
双引号内的特殊字符(如 $、`、" 和 \)需要进行转义。
示例
VAR="world"
echo "Hello, $VAR" # 输出:Hello, world
使用命令替换
DATE=$(date)
echo "Today is $DATE"
使用算术替换
NUM1=5
NUM2=10
echo "5 + 10 = $((NUM1 + NUM2))"
在这些示例中,双引号内的变量和命令会被解析和替换。
单引号 (')
单引号包围的字符串会保留所有字符的字面意义,不进行任何解析或替换。换句话说,单引号内的所有字符都会被原样保留。
示例
VAR="world"
echo 'Hello, $VAR' # 输出:Hello, $VAR
使用命令替换
DATE=$(date)
echo 'Today is $DATE' # 输出:Today is $DATE
使用算术替换
NUM1=5
NUM2=10
echo '5 + 10 = $((NUM1 + NUM2))' # 输出:5 + 10 = $((NUM1 + NUM2))
在这些示例中,单引号内的变量和命令不会被解析和替换。
什么时候使用双引号或单引号
双引号:当需要字符串中的变量、命令或算术表达式进行解析时使用。
单引号:当需要字符串中的所有字符保留其字面意义时使用。
example
使用双引号
echo "Hello, $VAR" # 解析变量
echo "Today is $DATE" # 解析命令替换
echo "5 + 10 = $((NUM1 + NUM2))" # 解析算术替换
使用单引号
echo 'Hello, $VAR' # 不解析变量
echo 'Today is $DATE' # 不解析命令替换
echo '5 + 10 = $((NUM1 + NUM2))' # 不解析算术替换