在 Bash 中,单引号 ('') 和双引号 (\'\') 有什么区别?
) 和双引号 ( ''
) ""
有什么区别
接受的答案 很棒 。我正在制作一个表格,帮助快速理解主题。解释涉及一个简单的变量 a
以及一个索引数组 arr
.
如果我们设定
a=apple # a simple variable
arr=(apple) # an indexed array with a single element
然后 echo
第二列中的表达式,我们将得到第三列中显示的结果/行为。第四列解释了该行为。
# | 表达 | 结果 | 评论 |
---|---|---|---|
1 |
"$a"
|
apple
|
变量在内部扩展 ""
|
2 |
'$a'
|
$a
|
变量不在内部扩展 ''
|
3 |
"'$a'"
|
'apple'
|
'' 里面没有特殊含义 ""
|
4 |
'"$a"'
|
"$a"
|
"" 在内部按字面意思处理 ''
|
5 |
'\''
|
p7 |
无法逃脱 ' ; '' 使用 "'" 或 $'\'' (ANSI-C 引用)
|
6 |
"red$arocks"
|
red
|
$arocks 不扩大 $a ;用于 ${a}rocks 保存 $a
|
7 |
"redapple$"
|
redapple$
|
$ 后面没有变量名,计算结果为 $
|
8 |
'\"'
|
\"
|
\ 里面没有特殊含义 ''
|
9 |
"\'"
|
\'
|
\' 在内部解释 "" ,但对 '
|
10 |
"\""
|
"
|
\" 在内部解释 ""
|
11 |
"*"
|
*
|
glob 在内部不起作用 "" 或 ''
|
12 |
"\t\n"
|
\t\n
|
\t 并且 \n 或 "" 内部没有特殊含义 '' ;使用 ANSI-C 引用
|
十三 |
"`echo hi`"
|
hi
|
`` 并 $() 在内部进行评估 "" (反引号保留在实际输出中)
|
14 |
'`echo hi`'
|
`echo hi`
|
`` 并且 $() 不在内部进行评估 '' (反引号保留在实际输出中)
|
15 |
'${arr[0]}'
|
${arr[0]}
|
无法在内部进行数组访问 ''
|
16 |
"${arr[0]}"
|
apple
|
数组访问在内部工作 ""
|
17 |
$'$a\''
|
$a'
|
单引号可以在 ANSI-C 引用中转义 |
18 |
"$'\t'"
|
$'\t'
|
ANSI-C 引用不被解释 ""
|
19 |
'!cmd'
|
!cmd
|
历史扩展字符 '!' 被忽略 ''
|
20 |
"!cmd"
|
cmd args
|
扩展到最近匹配的命令 "cmd"
|
21 |
$'!cmd'
|
!cmd
|
历史扩展字符 '!' 被忽略
|
参见: