shell脚本中 的 单引号和反引号经常混淆,请高手帮我区别它们的功能,谢谢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本中 的 单引号和反引号经常混淆,请高手帮我区别它们的功能,谢谢相关的知识,希望对你有一定的参考价值。

单引号原样输出,你可以记为“单调输出”,如下原样输出 eval echo a 这个字符串,很单调吧:
echo 'eval echo a'

反引号执行内容后输出,可以记为“反译输出”,要把引号中的内容反向翻译一下,如下要执行反绰号中的内容 eval echo a,得到 a,再执行 echo,最终输出 a:
echo `eval echo a`追问

那双引号呢?

追答

双引号和单引号差不多,但可以做变量的取值计算,可以记为双方通信,下面做对比:
先赋值 a=123

1) 单引号:单调输出 $a
echo '$a'

2) 双引号:双方通信,接到 a 的电话:"喂你好,我是a,请输出我的值 123",输出 123
echo "$a"

参考技术A 单引号内忽略掉所有特殊字符
反引号能够将一个命令的标准输出插在一个命令行中任何位置
参考技术B 双引号和单引号区别还是有区别的,别说差不多

(1) 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的(双引号可以)
(2) 单引号字串中不能出现单引号(对单引号使用转义符后也不行)
(3) 对于上一条,双引号可以
(4) 对于命名一个字符串,单引号双引号都可以,甚至可以不加引号
再举个例子吧,比方说预定义了一个变量name=zhangsan
双引号,myname="$name is me"
echo myname 这边输出的是: zhangsan is me
单引号,myname='$name is me'
echo myname 这边输出的是: $name is me
一般来说用双引号,单引号弱爆了

shell脚本单双引号问题描述

工作中常用到shell脚本,遇到了一个疑惑,求解。

    常见的解释:

  单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

  双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

    我的问题如图一:在vim编辑器中,第21行,在使用单引号的情况下,'$i' 是打印出了数值,不是上面解释的单引号里面的变量是无效的,打印出$i。

          图一

     与之类似的脚本,用双引号表示: 第18行

   6~9四行是str.txt内容(为了观看方便,copy到一起显示)

   

                图二、输出脚本

  双引号、单引号、没有引号结果如下图:红圈圈起来的部分。结果是:

    双引号括起来的变量,原样输出了图二中的第九行,* 在双引号中不起作用了
    单引号确实是任何字符都会原样输出,输出了$word

    没有引号,图二中第九行中首字母  *  起作用,输出了这个目录下的内容。

  

 

疑惑1:在图一中,单引号中的变量应该无效的但是结果确打印出了值,在图二中就是无效的了,这里是否是因为图一中的单引号用在了awk命令行中。

疑惑2:在图二中,双引号输出和没有引号输出结果,双引号在执行  "$word"  后,打印出 *  17 Procedure Status *  ,echo执行时,不是先碰到 * 符号,首先执行吗?为什么这里没有执行呢?不是说双引号中的 可以有变量的吗 ?  这里有一个问题就是 * 符号,在这里解释为是否属于变量将。

  任务完成了,但是这个疑惑,就像跟刺一样扎在心里不舒服,求解。

以上是关于shell脚本中 的 单引号和反引号经常混淆,请高手帮我区别它们的功能,谢谢的主要内容,如果未能解决你的问题,请参考以下文章

Shell中的单引号(‘)双引号(”)和反引号(·)

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

linux中双引号单引号和不加引号的区别吗

shell中三种引号的区别

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

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