8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Bash 中单引号和双引号的区别

Shaul Behr 2月前

161 0

在 Bash 中,单引号 ('') 和双引号 (\'\') 有什么区别?

) 和双引号 ( '' ) "" 有什么区别

帖子版权声明 1、本帖标题:Bash 中单引号和双引号的区别
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Shaul Behr在本站《linux》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 由于这是处理 Bash 中的引号时事实上的答案,因此在处理 shell 中的算术运算符时,我将补充上述答案中遗漏的一点。

    Bash shell 支持两种方式进行算术运算,一种由内置 let 命令定义,另一种由 $((..)) 运算符定义。前者计算算术表达式,而后者更像是复合语句。

    重要的是要理解,使用的算术表达式 let 会像任何其他 shell 命令一样进行分词、路径名扩展。因此需要进行适当的引用和转义。

    使用时请参见此示例 let

    let 'foo = 2 + 1'
    echo $foo
    3
    

    在这里使用单引号是完全没问题的,因为这里不需要变量扩展。考虑以下情况

    bar=1
    let 'foo = $bar + 1'
    

    它会失败,因为 $bar 下面的单引号不会 扩展 ,需要用双引号引起来

    let 'foo = '"$bar"' + 1'
    

    这应该是原因之一,应该 $((..)) 始终考虑使用 而不是使用 let 。因为在它里面,内容不受分词的影响。前面的示例使用 let 可以简单地写成

    (( bar=1, foo = bar + 1 ))
    

    一定要记住不要使用 $((..)) 单引号

    虽然 $((..)) 可以使用双引号,但这样做没有任何用处,因为它 不能 包含需要双引号的内容。只需确保它不是单引号即可。

    printf '%d\n' '$((1+1))'
    -bash: printf: $((1+1)): invalid number
    printf '%d\n' $((1+1))
    2
    printf '%d\n' "$((1+1))"
    2
    

    也许在单引号字符串中使用运算符的某些特殊情况下 $((..)) ,您需要以一种方式插入引号,即运算符要么不加引号,要么放在双引号中。例如,考虑这样一种情况,当您试图在语句中使用运算符 curl 来在每次发出请求时传递计数器时,请执行

    curl http://myurl.com --data-binary '{"requestCounter":'"$((reqcnt++))"'}'
    

    注意里面嵌套双引号的使用,如果没有双引号,文字字符串 $((reqcnt++)) 就会传递给 requestCounter 字段。

返回
作者最近主题: