📌  相关文章
📜  Shell脚本和Linux中单引号和双引号的区别

📅  最后修改于: 2021-09-14 02:34:20             🧑  作者: Mango

单引号和双引号在 Linux 中都可以在使用 shell 脚本或直接在终端中执行命令时起作用,但 bash shell 解释它们的方式有所不同。

单引号:

用单引号 (‘) 将字符括起来保留引号内每个字符的字面量。简而言之,shell 将逐字解释单引号内的封闭文本,并且不会插入任何内容,包括变量、反引号、某些 \ 转义符等。单引号中的任何字符都没有特殊含义。当您不想使用转义字符来改变 bash 解释输入字符串的方式时,这很方便。

双引号:

双引号类似于单引号,只是它允许 shell 解释美元符号 ($)、反引号 (`)、反斜杠 (\) 和感叹号 (!)。字符与双引号一起使用时具有特殊含义,并且在显示之前对其进行评估。双引号可以通过在双引号前加上反斜杠来使用。

例子

1.在下面提到的情况下,测试是一个初始化为10的变量。美元符号($)表示后面的字符是一个变量名,应该用那个变量的值代替,在这种情况下是10.当$test被单引号括起来时,里面的文本会被保留并且不会显示值。 $test 不会被插入。但是当它在双引号内关闭时,则评估 $test 并打印变量 10 的值。

test=10
echo "$test"
echo 'test'

linux 示例中的单/双引号

2.在下面提到的情况下,当\n 用在双引号内时,它被解释为换行符,但当它用在单引号内时,\n 与同一行中的其他文本一起显示。

printf "k\\nk"
printf 'k\\nk'

linux 示例中的单/双引号

3.在下面提到的情况下,当 ${array[0]} 用单引号括起来时,它会被计算并打印 10,因为它是数组的第 0 个元素,但是当用单引号括起来时,字面量标识的 $ 被保留并且不会被评估。

array=(10) #an array with a single element at index 0
echo "${array[0]}"
echo '${array[0]}'

linux 示例中的单/双引号

4.在下面提到的情况下,单引号被双引号括起来时没有特殊含义,因此即使在单引号中 $a 也会被评估。但是,当双引号括在单引号中时,它会按字面意思处理,即使 $a 位于双引号内,也不会对其求值。

a=10
echo "'$a'"
echo '"$a"'

linux 示例中的单/双引号