shell 中单、双引号问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell 中单、双引号问题相关的知识,希望对你有一定的参考价值。

当变量赋值是用单或双引号,那么echo时的变量名替换,换下来的到底是什么呢?
如:
$ address="This is a room"
$ echo $address
当替换时 $address 变成了什么?
又如:
$ room=“‘quote’ this is a quote"
$ echo $room
此时$room 又替换成什么了?也就是说此时的 $echo 后面的参数是什么?

双引号不对引号内的命令进行解释,你输入什么就是什么
而1左边的那个单引号会先解释命令,然后将命令的结果输出
上面两个你可以自己用bash做测试
第一个显示的是This is a room
第二个显示的是quote的执行结果+this is a quote (前提是你的机器有quote这个命令)
参考技术A 学习重在实践,自己敲一下,啥都出来了。
假设 PATH=/etc
1)单引号会屏蔽 $ 的取值功能。
# echo '$PATH'
$PATH
2)双引号则不会。
# echo "$PATH"
/etc
3)倒引号表示优先执行。下例即是先执行echo命令,然后将结果赋值给myPath。
# myPath=`echo $PATH`
# echo $myPath
/etc
否则
# myPath=echo $PATH
这样会报错,因为shell命令解析是根据空格“分割重组”的。先分割成myPath=echo和$PATH,然后做变量替换,$PATH被替换为/etc,最后重组变成:myPath=echo /etc。显然/etc不是一个命令,因此会报错。
参考技术B 推荐shell十三问

shell中单引号、双引号、反引号的使用

参考技术A shell中单引号、双引号、反引号的使用在编写shell脚本时,会经常地使用到单引号、双引号、反引号这些特殊的符号。它们在shell中有着不同的作用,但容易被误用和引起混乱。简单总结一下三者的使用和区别。单引号它关闭shell中所有的特殊符号使用和解释,即单引号间的内容全部以普通字符的含义进行文本使用和解释,不管是特殊字符
$
,还是转义字符之类的。例子:1~$
a=12;test='this
is
a
$a
/$
`date`';echo
$test2this
is
a
$a
/$
`date`双引号它关闭shell中大部分的特殊符号,但是某些保留,比如
$
,转义字符
/(不包括/n,/t之类),反引号字符,单引号字符在双引号中时作为普通字符,不具有上面的功能作用。例子:01~$
a=12;test=this
is
a
$a
/b
`date`;echo
$test02this
is
a
12
/b
Thu
Mar
21
15:24:45
HKT
20130304~$
a=12;test='this
is
a
$a
/b
`date`';echo
$test05'this
is
a
12
/b
Thu
Mar
21
15:32:09
HKT
2013'0607~$
a=12;test=this
is
a
$a
/n
`date`;echo
$test08this
is
a
12
/n
Thu
Mar
21
15:40:09
HKT
20130910~$
a=12;test=this
is
a
$a
/$
`date`;echo
$test11this
is
a
12
$
Thu
Mar
21
15:40:38
HKT
2013单引号、双引号用于把带有空格的字符串赋值给变量,如果没有单引号或双引号,shell会把空格后的字符串解释为命令,即把空格作为变量赋值的结束。1~$
a=13;test1=this
is
a
$a
/b
`date`;
echo
$test12is:
command
not
found特别注意:在shell脚本中进行变量的赋值时,变量名、等号和变量值之间不能有空格,否则就是上面一样的错误。反引号它的作用是命令替换,将其中的字符串当成shell命令执行,返回命令的执行结果,见上面的例子。反引号包括的字符串必须是能执行的命令,否则会出错。例子:1~$
a=12;test=`this
is
a
$a
/b
`date``;echo
$test2No
command
'this'
found,
did
you
mean:3Command
'thin'
from
package
'thin'
(universe)4this:
command
not
found5date符号$(
)的作用和反引号的一样,都是命令替换:1~$
echo
$(date)2Thu
Mar
21
15:54:15
HKT
2013反斜杠反斜杠一般用作转义字符,如果echo要让转义字符发生作用,就要使用-e选项,且包含转义字符的字符串要使用双引号1~$
echo
this
is
a
/n
test2this
is
a
/n
test3~$
echo
-e
this
is
a
/n
test4this
is
a5test反斜杠的另一种作用,就是当反斜杠用于一行的最后一个字符时,shell把行尾的反斜杠作为续行,这种结构在分几行输入长命令时经常使用。

以上是关于shell 中单、双引号问题的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本中单引号和双引号的区别

shell中单引号怎么转义

shell脚本中单双引号疑惑

shell中单引号、双引号、反引号的使用

shell 中单、双引号问题

终于知道 Shell 中单引号双引号的区别了