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

时间: 2024-11-10 14:13:45

shell脚本中单双引号疑惑的相关文章

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

转自:http://blog.csdn.net/iamlaosong/article/details/54728393 最近要编个shell脚本处理数据,需要检测数据文件是否存在,文件名中包含日期,所以需要生成最近几天的日期,以便检测文件是否存在,看下面的脚本中如何使用双引号.单引号.反引号: OPDATE=`date -d '-1 day' +%Y%m%d` for i in $(seq 10) do FILEDATE=`date -d "-$i day" +%Y%m%d` echo

linux shell 单引号 双引号 反引号的区别

一.单引号和双引号 首先, 单引号和双引号,都是为了解决中间有空格的问题. 因为空格在linux中时作为一个很典型的分隔符,比如 string1=this is a string,这样执行就会报错.为了避免这个问题,因此就产生了单引号和双引号.他们的区别在于,单引号将剥夺其中的所有字符的特殊含义,而双引号中的 '$'(参数替换)和'`'(命令替换)是例外.所以,两者基本上没有什么区别,除非在内容中遇到了参数替换符$和命令替换符`. 所以下面的结果:num=3echo ‘$num’$numecho

Shell脚本中单引号(‘)和双引号(“)的使用区别[转载]

shell可以识别4种不同类型的引字符号: 单引号字符' 双引号字符" 反斜杠字符\ 反引号字符` 1. 单引号 ( '' ) # grep Susan phonebook Susan Goldberg 403-212-4921 Susan Topple    212-234-2343 如果我们想查找的是Susan Goldberg,不能直接使用grep Susan Goldberg phonebook命令,grep会把Goldberg和phonebook当作需要搜索的文件 # grep 'Su

shell脚本中反引号与双引号的·区别与联系

双引号 目的: 为了包含文字或者函数段. 除了本身,反引号内的函数,$开头的变量和\开头反转换的字符外, 其余都是直接输出. 被双引号用括住的内容,将被视为单一字串.它防止通配符扩展,但允许变量扩展.这点与单引数的处理方式不同. 反引号 目的是为了在双引号内保持函数转换. 但单引号内其无作用.在前面的单双引号,括住的是字串,但如果该字串是一列命令列,会怎样?答案是不会执行.要处理这种情况,我们得用反单引号来做.fdv=`date +%F`echo "Today $fdv"在倒引号内的

shell中的双引号,单引号,反引号

在shell中引号分为三种:单引号,双引号和反引号. 单引号 ‘ 由单引号括起来的字符都作为普通字符出现.特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释.单引号用于保持引号内所有字符的字面值,即使引号内的\和回车也不例外,但是字符串中不能出现单引号.(注意是所有,只是单引号本身不能够出现在其中).例如: $ string=’$PATH’ $ echo $string $PATH 可见$保持了其本身的含义,作为普通字符出现. 双引号 “ 双引号用于保持引号内所有字符的字面值(回

xml和jsp页面中单双引号嵌套使用

<property name="car" value="#{car}"></property> <property name='info' value='#{car.price>300?"白领":"蓝领"}'></property> jsp中也一样  即该表中属性单双引号使用要一致 <%-- <s:radio name="gender" li

对于表单中单双引号问题

1.表单中录入单双引号,将内容通过post传入到后台后,将数据进行转义存入数据库 foreach($_POST as $k => $v){ $_POST[$k] = addcslashes($v,"'\""); } 2.从数据库中取出来显示到页面中,例如那种修改页面的显示,value=“”这样单双引号又是问题,处理如下 value="<?php echo str_replace('"', '"', str_replace("

shell脚本中反引号与$()的区别

反引号与$()的区别: 我们先来看一个例子: 创建一个名为test.sh的文件,在文件中输入如下两条指令 运行结果如下: 为什么这两条语句运行结果不一样呢? 这是一个非常有意思的问题,但要解释这个问题确比较困难,我来换一个简单一点的例子,通俗的解释一下. 比如我们有一个shell脚本名为test1.sh有以两行 我们可以使用sh -x test1.sh来分析bash是如何来解释这个脚本的,返回的信息如下: 通过上图我们可以得出两个结论: 1. 反引号中\$并没有将$的特殊意义转换 反引号包含的内

Shell中的单引号(‘)双引号(”)和反引号(&#183;)

在bash中,$.*.?.[.].'.".`.\.有特殊的含义.类似于编译器的预编译过程,bash在扫描命令行的过程中,会在文本层次上,优先解释所有的特殊字符,之后对转换完成的新命令行,进行内核的系统调用. 其中,反引号类似于函数调用,而不仅仅是简单的文本替换及匹配. 命令行中,被单引号引用的部分,其中所有的特殊字符按照普通字符解释: 双引号引用的部分,仅解释$(美元符号).\(\n \t除外).`(反引号),解释后的文本仅按照普通文字处理(同单引号). 反引号相当于命令替换,引用的部分优先执行