shell脚本中单双引号疑惑

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

    常见的解释:

  单引号字符串的限制:

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

  双引号的优点:

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

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

          图一

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

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

   

                图二、输出脚本

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

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

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

  

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

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

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

原文地址:https://www.cnblogs.com/z977690557/p/9455985.html