Bash中$ {}和$()之间的区别

我有两个问题,可以用一些帮助我理解它们。

  1. ${}$()之间有什么区别? 我明白, ()意味着在单独的shell中运行命令,并放置$意味着将值传递给variables。 有人能帮我理解这个吗? 如果我错了,请纠正我。

  2. 如果我们可以使用/bash$ for ((i=0;i<10;i++)); do echo $i; done /bash$ for ((i=0;i<10;i++)); do echo $i; done /bash$ while ((i=0;i<10;i++)); do echo $i; done为什么我不能使用它作为/bash$ while ((i=0;i<10;i++)); do echo $i; done /bash$ while ((i=0;i<10;i++)); do echo $i; done /bash$ while ((i=0;i<10;i++)); do echo $i; done ? 两者的执行周期有什么不同?

Solutions Collecting From Web of "Bash中$ {}和$()之间的区别"

语法是令牌级的,所以美元符号的含义取决于它所在的令牌。表达式$(command)`command`一个现代同义词,代表进程替换; 这意味着,运行command并把它的输出放在这里。 所以

 echo "Today is $(date). A fine day." 

将运行date命令并将其输出包含在参数中以echo 。 括号与在子shell中运行命令的语法无关,尽管它们有一些共同之处(命令替换也在单独的子shell中运行)。

相比之下, ${variable}只是一个消歧机制,所以当你的意思是变量var的内容后跟${var}text时,你可以说${var}text text (而不是$vartext ,也就是变量的内容vartext )。

while循环期望一个单一的参数应该被评估为真或假(或者实际上是多个,最后一个的真值被检查 – 谢谢Jonathan Leffler指出)。 当它是假的,循环不再执行。 for循环遍历项目列表,并依次将每个项目绑定到一个循环变量; 你所引用的语法是一个 – 而不是一般化的 – 在一系列算术值上表达一个循环的方式。

像这样的for循环可以改写为while循环。 表达方式

 for ((init; check; step)); do body done 

相当于

 init while check; do body step done 

把所有的循环控制放在一个地方以保持可读性是有意义的。 但正如你所看到的那样, for循环比while循环多了一点。

当然,这个语法是Bash特定的; 经典的Bourne壳只有

 for variable in token1 token2 ...; do 

(稍微优雅一些​​,只要确定参数字符串不包含任何%格式代码,就可以避免第一个例子中的echo

 date +'Today is %c. A fine day.' 

避免一个可以学习的过程是一个重要的考虑因素,即使它在这个孤立的例子中没有太大的区别)。

  1. $()表示:“首先评估这个,然后评估其余的行”。

    例如:

     echo $(pwd)/myFile.txt 

    将被解释为

     echo /my/path/myFile.txt 

    另一方面${}展开一个变量。

    例如:

     MY_VAR=toto echo ${MY_VAR}/myFile.txt 

    将被解释为

     echo toto/myFile.txt 
  2. 为什么我不能用它作为bash$ while ((i=0;i<10;i++)); do echo $i; done bash$ while ((i=0;i<10;i++)); do echo $i; done

    恐怕答案只是bash的语法while不是for的语法。

  1. 你的理解是对的。 有关{}的详细信息,请参阅bash ref – 参数扩展

  2. 'for'和'while'具有不同的语法,并为迭代提供不同风格的程序员控制。 大多数非asm语言提供了类似的语法。

同时,你可能会写i=0; while [ $i -lt 10 ]; do echo $i; i=$(( i + 1 )); done i=0; while [ $i -lt 10 ]; do echo $i; i=$(( i + 1 )); done 基本上i=0; while [ $i -lt 10 ]; do echo $i; i=$(( i + 1 )); done了关于迭代的所有事情