单引号 ''、双引号 "" 和 shell变量
字符串是 shell 编程中 最常见的 变量,没有空格的字符串变量可以用 单引号,也可以用 双引号,也可以不用 引号。 但是当变量 是存在空格的字符串时就需要使用 单引号 和 双引号 ,否则操作系统会将空格后面的字符串识别成命令。
[root@localhost home]# var=hello world ! #Shell程序执行完 var=hello 后,把 world 解释为命令。
bash: world: command not found...
[root@localhost home]#
[root@localhost home]# var="hello world !"
[root@localhost home]# echo ${var}
hello world !
[root@localhost home]#
单引号 '' 和双引号 "" 区别
单引号对字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
解释:单引号' '会让shell忽略所有特殊字符,包括 $、\、
[root@localhost home]# echo ${var} #输出var变量
hello world !
[root@localhost home]# newvar='The date is `date` ${var}' #定义变量newvar,使用单引号。
[root@localhost home]# echo ${newvar}
The date is `date` ${var} #在单引号中特殊字符` `,${ }被忽略了。
[root@localhost home]#
双引号对字符串的限制:
- 双引号里可以有变量
- 双引号里可以出现转义字符
解释:单引号' '会让shell忽略所有特殊字符,包括 $、\、
[root@localhost home]# echo ${var}
hello world !
[root@localhost home]# newvar='The date is `date` ${var}'
[root@localhost home]# echo ${newvar}
The date is `date` ${var}
[root@localhost home]# unset newvar #删除变量
[root@localhost home]# newvar="The date is `date` ${var}" #定义变量newvar,使用双引号。
[root@localhost home]# echo ${newvar}
The date is Mon May 24 19:59:49 PDT 2021 hello world ! #在双引号中特殊字符` `,${ }没有被忽略。
[root@localhost home]#
反引号 ` ` 和单引号 '' 和双引号 "" 区别
单引号 和 双引号 是用来定义变量。而 反引号 则是用来命令替换的。
$() 和 反引号 都是命令替换 功能符号,反引号 (`) 位于键盘的 Tab 键 的上方,1 键的左方。注意与单引号(')位于Enter键的左方的区别。
命令替换是指shell能够将一个命令的 标准输出 插在一个命令行中任何位置。
[root@localhost home]# echo the date is `date` #shell会执行反引号中的 date 命令,把结果插入到 echo 命令中。
the date is Mon May 24 19:15:13 PDT 2021
[root@localhost home]#
$() 和 反引号 区别:
- $()的并不是所有的类unix系统都支持这种方式.
- 反引号
- 多层次的复合替换中 $() 比 `` 更直观,易理解。
实例:
将 cmd1 执行结果作为 cmd2 参数,再将 cmd2 结果作为 cmd3 的参数
cmd3 $(cmd2 $(cmd1))
如果是用反引号,直接引用是不行的,还需要作跳脱处理
cmd3 `cmd2 \`cmd1\``