q986 发表于 2018-8-27 10:41:27

shell 单引号 双引号 不加引号

  描述linux shell中单引号、双引号及不加引号的简单区别
  
  
  单引号:
  可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。
  双引号:
  把双引号内的内容输出出来;如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来。
  不加引号:
  不会将含有空格的字符串视为一个整体输出, 如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用。
  实例演示:
  例1:
  # echo '`date`'
  #→单引号时看到啥就显示啥
  `date`
  # echo "`date`"
  #→双引号时如果里面是变量,会先把变量解析成具体内容在显示
  Sat Oct 29 18:02:59 CST 2011
  # echo `date`
  #→对于连续的字符串等内容一般不加引号也可,加双引号一般比较保险,推荐
  Sat Oct 29 18:03:08 CST 2011
  例2:
  # oldboy=testchars#→创建一个变量
  # echo $oldboy   #→不加引号,显示一个变量解析后的内容
  testchars
  # echo '$oldboy'#→单引号,显示一个变量本身
  $oldboy
  # echo "$oldboy"#→双引号,显示一个变量内容,引号内可以是变量、字符串等
  testchars
  过滤字符串测试:
  # cat >grep.log
  testchars
  oldboy
  # cat grep.log
  testchars
  oldboy
  # grep "$oldboy" grep.log
  testchars
  # grep '$oldboy' grep.log
  # grep $oldboy grep.log
  testchars
  $ cat >oldboy.log
  \"
  $ cat oldboy.log
  \"
  $grep '\"' oldboy.log
  \"
  提示:有关单引号和双引号的区别详细内容请参考《老男孩linux运维实战培训-shell编程精讲》
  拓展:awk调用shell变量问题
  $ ett=123
  $ awk 'BEGIN {print '$ett'}'
  123
  $ awk 'BEGIN {print "$ett"}'
  $ett
  $ ett='abc'
  $ awk 'BEGIN {print "$ett"}'
  $ett
  $ awk 'BEGIN {print '$ett'}'
  $ awk 'BEGIN {print "'$ett'"}'
  abc
  

页: [1]
查看完整版本: shell 单引号 双引号 不加引号