linux shell中单引号、双引号及不加引号的简单区别
1. 简单区别
(1) 单引号:
将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。
(2) 双引号:
把双引号内的内容输出出来;如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来。
(3) 不加引号:
不会将含有空格的字符串视为一个整体输出, 如果内容中有命令、变量等,会先把变量、命令解析出结果,然后再输出最终内容来。
如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用。
[root@n1 ~]# name=quxl
[root@n1 ~]# echo $name #不加引号,变量解析出结果,然后再输出
quxl
[root@n1 ~]# echo '$name' #单引号,原样输出
$name
[root@n1 ~]# echo "$name" #双引号,变量解析出结果,然后再输出
quxl
#区分一下双引号与不加引号的区别
[root@n1 ~]# echo "hello $name"
hello quxl
[root@n1 ~]# echo hello $name
hello quxl #双引号,不加引号看起来没区别啊?
[root@n1 ~]# echo hello $name
hello quxl #不加引号,只有一个空格
[root@n1 ~]# echo "hello $name"
hello quxl #双引号,照原格式输出空格
[root@n1 ~]# echo ' today is `date`' #原样输出
today is `date`
[root@n1 ~]# echo "today is `date`" #执行命令后再输出
today is Tue Oct 24 11:42:20 CST 2023
2. 注意事项
(1) 当要引用一个变量的值时,一般推荐使用双引号。
(2) 使用双引号除了变量名前缀($)、后引符(`)和转义符()外,会使shell不再解释引号中其它所有的特殊字符。
(3) 用双引号时$仍被当成特殊字符,允许引用一个被双引号引起的变量("$variable"), 那也是说$variable会被它的值所代替。
(4) 用双引号还能使句子不被分割开.
(5) 一个参数用双引号引起来能使它被看作一个单元,这样即使参数里面包含有空白字符也不会被shell分割开了。
3. 关于双引号里的感叹号
在命令行上,把感叹号"!"放在双引号里执行命令会出错(译者注:比如说:echo "hello!"). 因为感叹号被解释成了一个历史命令. 然而在一个脚本文件里,这么写则是正确的,因为在脚本文件里Bash的历史机制被禁用了。
在双号号里在字符""也会引起许多不一致的行为。
[root@n1 ~]# echo hello\!
hello!
[root@n1 ~]# echo "hello\!"
hello\!
[root@n1 ~]# echo !
!
[root@n1 ~]# echo "!"
-bash: !: event not found