' 和 " 有什么区别?

' 和 " 有什么区别?

我尝试在 bash 脚本中创建一个文本文件。

echo命令跨越多行并有一些双引号“”。

#!/bin/bash 

echo "blabla bla bla bla "blabla" 
bla bla " bla bla bla"
and so on and so on

bla bla

blu bla  "bla bla bla "
bla bla" > /root/bin/bla

命令中有很多双引号“”,echo这是不可取的。

我做到了

#!/bin/bash 

echo 'blabla bla bla bla "blabla" 
bla bla " bla bla bla"
and so on and so on

bla bla

blu bla  "bla bla bla "
bla bla' > /root/bin/bla

我想知道双引号 " 和单引号 ' 之间是否有任何区别

哪一个的优先级更高?难道仅仅是因为它们在视觉上不同吗?

答案1

来自bash手册:

3.1.2.2 单引号

将字符括在单引号 (''') 中可保留引号内每个字符的字面值。单引号之间不能出现单引号,即使前面有反斜杠也是如此。

3.1.2.3 双引号

将字符括在双引号 ('"') 中会保留引号内所有字符的字面值,但 '$'、'`'、'\' 和启用历史扩展时的 '!' 除外。字符 '$' 和 '`' 在双引号内保留其特殊含义(请参阅 Shell 扩展),仅当后跟以下字符之一时,反斜杠才保留其特殊含义:'$'、'`'、'"'、'。 \' 或换行符。在双引号内,后跟这些字符之一的反斜杠将被删除。前面没有特殊含义的反斜杠字符保持不变。双引号可以在双引号内引用,方法是在双引号前面加上反斜杠。如果启用,将执行历史扩展,除非出现“!”出现在双引号中的内容使用反斜杠进行转义。 '!' 前面的反斜杠没有被删除。特殊参数 '*' 和 '@' 在双引号中时具有特殊含义(请参阅 Shell 参数扩展)。

以下是上述内容的一些实际演示:

  • 双引号允许计算参数扩展,但单引号不允许:
$ var=foo
$ echo "$var"
foo
$ echo '$var'
$var
  • 双引号允许计算反斜杠转义,但单引号不允许:
$ echo "\\"
\
$ echo '\\'
\\
  • 双引号允许计算命令替换 ( $(, `),但单引号不允许:
$ echo "$(echo bar)"
bar
$ echo '$(echo bar)'
$(echo bar)

相关内容