单引号和双引号在 Linux 中都可以在使用 shell 脚本或直接在终端中执行命令时起作用,但 bash shell 解释它们的方式有所不同。
单引号:
用单引号 (‘) 将字符括起来保留引号内每个字符的字面量。简而言之,shell 将逐字解释单引号内的封闭文本,并且不会插入任何内容,包括变量、反引号、某些 \ 转义符等。单引号中的任何字符都没有特殊含义。当您不想使用转义字符来改变 bash 解释输入字符串的方式时,这很方便。
双引号:
双引号类似于单引号,只是它允许 shell 解释美元符号 ($)、反引号 (`)、反斜杠 (\) 和感叹号 (!)。字符与双引号一起使用时具有特殊含义,并且在显示之前对其进行评估。双引号可以通过在双引号前加上反斜杠来使用。
例子
1.在下面提到的情况下,测试是一个初始化为10的变量。美元符号($)表示后面的字符是一个变量名,应该用那个变量的值代替,在这种情况下是10.当$test被单引号括起来时,里面的文本会被保留并且不会显示值。 $test 不会被插入。但是当它在双引号内关闭时,则评估 $test 并打印变量 10 的值。
test=10
echo "$test"
echo 'test'
2.在下面提到的情况下,当\n 用在双引号内时,它被解释为换行符,但当它用在单引号内时,\n 与同一行中的其他文本一起显示。
printf "k\\nk"
printf 'k\\nk'
3.在下面提到的情况下,当 ${array[0]} 用单引号括起来时,它会被计算并打印 10,因为它是数组的第 0 个元素,但是当用单引号括起来时,字面量标识的 $ 被保留并且不会被评估。
array=(10) #an array with a single element at index 0
echo "${array[0]}"
echo '${array[0]}'
4.在下面提到的情况下,单引号被双引号括起来时没有特殊含义,因此即使在单引号中 $a 也会被评估。但是,当双引号括在单引号中时,它会按字面意思处理,即使 $a 位于双引号内,也不会对其求值。
a=10
echo "'$a'"
echo '"$a"'