单引号 ''、双引号 "" 和 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系统都支持这种方式.
  • 反引号 所有的类unix系统都支持。
  • 多层次的复合替换中 $() 比 `` 更直观,易理解。
    实例:
    将 cmd1 执行结果作为 cmd2 参数,再将 cmd2 结果作为 cmd3 的参数
cmd3 $(cmd2 $(cmd1))

如果是用反引号,直接引用是不行的,还需要作跳脱处理

cmd3 `cmd2 \`cmd1\``
posted on 2021-05-25 11:08  哑吧  阅读(2410)  评论(0编辑  收藏  举报