当前位置: 首页 > 面试题库 >

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

訾俊名
2023-03-14
问题内容

我有两个问题,可能需要一些帮助来理解它们。

  1. ${}和之间有什么区别$()?我知道这() 意味着在单独的外壳中运行命令,然后将其$传递给变量。有人可以帮助我理解这一点吗?如果我错了,请纠正我。

  2. 如果我们可以使用for ((i=0;i<10;i++)); do echo $i; done并且效果很好,那我为什么不能使用它while ((i=0;i<10;i++)); do echo $i; done呢?两者的执行周期有何不同?


问题答案:

语法是令牌级别的,因此美元符号的含义取决于其所在的令牌。表达式$(command)是现代代名词command,代表命令替换;这意味着运行command并将其输出放在此处。所以

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

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

相比之下,${variable}这只是一种消除歧义的机制,因此您可以说${var}text何时表示变量的内容var,然后是text(相对于$vartext表示变量内容的vartext)。

while环路期望应该评估为真或假的一个参数(或实际多个,其中检查的最后一个的真值-感谢乔纳森·莱弗勒指出了这一点);
如果为假,则不再执行循环。所述for循环迭代项和各向依次循环变量绑定的列表; 您所指的语法是一种在一定范围的算术值上表达循环的(而不是通用的)方法。

一个for这样的循环可以改述为while循环。表达方式

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

相当于

init
while check; do
    body
    step
done

为了清晰起见,将所有循环控制都放在一个位置很有意义;但是当它这样表示你可以看到,for循环就超过了相当多的while循环。

当然,这种语法是特定于Bash的。经典的伯恩贝壳只有

for variable in token1 token2 ...; do

(更优雅一点,echo只要确定参数字符串不包含任何%格式代码,就可以在第一个示例中避免使用:

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

避免可能的过程是一个重要的考虑因素,即使在这个孤立的示例中并没有太大的不同。)



 类似资料:
  • 问题内容: 我是bash脚本编写的初学者,我要做一个“作业”。我已经弄清楚了大部分内容,但是有一部分说我必须回显父bash的pid和将要运行的两个子shell的pid。因此,我在网上查看并发现了这一点(Linux文档项目): 所以这是我的问题: 1)第一个回显打印什么?这是父bash的pid吗? 2)为什么第二回波打印出0? 3)$ BASH_SUBSHELL是命令还是变量? 4)我正在Mac上做

  • 本文向大家介绍Python和Bash之间的区别,包括了Python和Bash之间的区别的使用技巧和注意事项,需要的朋友参考一下 Python Python是一种编程语言,旨在易于实现和易于理解。它是一种动态类型的语言。它不使用指针。 重击 Bash是命令行解释器,默认情况下在Linux和MacOS操作系统中提供。它也可以安装在其他操作系统中。它是Linux和MacOS的默认用户外壳程序。 以下是P

  • 问题内容: 在Bash脚本的标头中,这两个语句之间有什么区别: 当查阅 手册页时,得到以下定义: 这是什么意思? 问题答案: 运行命令,通过具有寻找不管程序的默认版本是在当前的利益 ENV ironment。 这样,您不必在系统上的特定位置查找它,因为这些路径可能在不同系统上的不同位置。只要它在您的路径中,它就会找到它。 缺点是,如果您希望支持Linux,则将无法传递多个参数(例如,您将无法编写)

  • 问题内容: 我对和感到困惑。我有两本PHP书。一个说它们是相同的,但是另一个说它们是不同的。我以为他们也一样。 他们不一样吗? 问题答案: 是按位与。请参见按位运算符。假设您这样做: 是逻辑AND。请参阅逻辑运算符。考虑一下这个真值表:

  • 问题内容: 这个问题已经在这里有了答案 : JavaScript比较中应使用哪个等于运算符(== vs ===)? (49个答案) 5个月前关闭。 和之间的区别是什么?我也看过和运算符。还有更多这样的运营商吗? 问题答案: 并且是严格的比较运算符: JavaScript具有严格和类型转换相等性比较。为了相等,要比较的对象必须具有相同的类型,并且: 当两个字符串在相同位置具有相同的字符序列,相同的长

  • 问题内容: Linux Bash中的&字符和分号有什么区别? 例如, 与 问题答案: 该运算符是布尔AND运算符:如果左侧返回非零退出状态,则该运算符将返回该状态并且不评估右侧(发生短路),否则它将评估右侧并返回其退出状态。通常用于确保仅在成功运行后才能运行。 所述令牌只是分开的命令,所以它会运行第二个命令不管第一个是否成功。