带或不带美元的双括号


75

$(...)一样(...)的击?

另外,$((...))与相同((...))吗?

另外,${...}与相同{...}吗?

一般来说,美元符号代表什么?谢谢。


有关更全面的答案,请参阅tldp.org/LDP/abs/html/special-chars.html。例如,在正则表达式上下文中的$表示行尾。通常$ var给出var的值。将var视为对值的引用(或名称),例如在var = value中,$ var取消引用var以产生其引用的值,并且在其以引用为前缀的上下文中,可以将其视为解引用运算符。

tldp.org并不是有关Bash的重要信息,因为该网站存在许多错误和误导性信息。
codeforester

Answers:


174
  • $(...)表示在子外壳的paren中执行命令并返回其stdout。例:

    $ echo "The current date is $(date)"
    The current date is Mon Jul  6 14:27:59 PDT 2015
    
  • (...)表示在子外壳程序中运行括号中列出的命令。例:

    $ a=1; (a=2; echo "inside: a=$a"); echo "outside: a=$a"
    inside: a=2
    outside: a=1
    
  • $((...)) 表示执行算术并返回计算结果。例:

    $ a=$((2+3)); echo "a=$a"
    a=5
    
  • ((...))表示执行算术运算,可能会更改shell变量的值,但不返回其结果。例:

    $ ((a=2+3)); echo "a=$a"
    a=5
    
  • ${...}表示返回花括号中命名的shell变量的值。例:

    $ echo ${SHELL}
    /bin/bash
    
  • {...}表示将大括号中的命令作为一组执行。例:

    $ false || { echo "We failed"; exit 1; }
    We failed
    

一般来说,美元符号代表什么?

它表示在给定上下文中的含义。


9
至少对于((...))(...),您可以认为以美元为前缀的版本与该语句的工作方式相同,但扩展到输出(其中的“输出”((...))是算术结果。对于{...}每种情况,存在一个更细微的类比; 。他们组及其内容从他们的周围环境想${foo}_barVS$foo_barecho foo; echo bar > /dev/nullVS { echo foo; echo bar; } > /dev/null
chepner

优秀的答案,除了最后一段:$符号总是表示扩展。即,基于后会发生什么$(如((({,等)的一些字符串值是计算$...表达式替换为计算的字符串
cmaster-恢复莫妮卡

4

添加到上面的答案:

  1. [..]用于条件或逻辑表达式中。例:
$ VAR=2
$ if [ $VAR -eq 2 ]

> then
> echo 'yes'
> fi
yes
  1. [[...]]为单个方括号提供扩展功能。特别是,它对于=〜运算符(在正则表达式中使用)很有用。例:
$ VAR='some string'
$ if [[ $VAR =~ [a-z] ]]; then
> echo 'is alphabetic'
> fi
is alphabetic

参考:

https://linuxconfig.org/bash-scripting-parenthesis-explained

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.