zoukankan      html  css  js  c++  java
  • shell脚本中单双引号疑惑

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

        常见的解释:

      单引号字符串的限制:

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

      双引号的优点:

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

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

              图一

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

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

       

                    图二、输出脚本

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

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

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

      

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

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

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

  • 相关阅读:
    字段操作
    数据操作
    表操作
    数据库操作
    如何连接mysql
    mysql新增用户和修改用户密码
    表和库和服务器的关系
    MySql的复合类型
    yum软件源
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/z977690557/p/9455985.html
Copyright © 2011-2022 走看看