Ana*_*eep 77 linux bash scripting
我有两个问题,可以使用一些帮助来理解它们.
${}和之间有什么区别$()?我理解这()
意味着在单独的shell中运行命令并放置$意味着将值传递给变量.有人能帮助我理解这个吗?如果我错了,请纠正我.
如果我们可以使用for ((i=0;i<10;i++)); do echo $i; done并且它工作正常那么为什么我不能用它while ((i=0;i<10;i++)); do echo $i; done?两者的执行周期有什么不同?
tri*_*eee 127
语法是令牌级别的,因此美元符号的含义取决于它所在的令牌.表达式$(command)是一个现代同义词`command`,代表命令替换; 它意味着,运行command并将其输出放在这里.所以
echo "Today is $(date). A fine day."
Run Code Online (Sandbox Code Playgroud)
将运行该date命令并将其输出包含在参数中echo.括号是无关的语法在子shell中运行的命令,但他们有一个共同点(命令替换也是一个独立的子shell中运行).
相比之下,${variable}它只是一种消歧机制,所以你可以说${var}text你的意思是变量的内容var,然后是text(相反,$vartext这意味着变量的内容vartext).
该while环路期望应该评估为真或假的一个参数(或实际多个,其中检查的最后一个的真值-感谢乔纳森·莱弗勒指出了这一点); 当它为假时,循环不再执行.在for以上的项目的列表循环迭代并结合到每个依次循环变量; 你引用的语法是一种 - 相当概括 - 表示一系列算术值的循环的方法.
for像这样的循环可以被重新描述为while循环.表达方式
for ((init; check; step)); do
body
done
Run Code Online (Sandbox Code Playgroud)
相当于
init
while check; do
body
step
done
Run Code Online (Sandbox Code Playgroud)
将所有循环控制保持在一个位置以便于读取是有意义的; 但正如你可以看到它表达的时候,for循环比while循环更多.
当然,这种语法是特定于Bash的; 经典的Bourne shell只有
for variable in token1 token2 ...; do
Run Code Online (Sandbox Code Playgroud)
(更优雅的是,echo只要您确定您的参数字符串不包含任何%格式代码,您就可以避免在第一个示例中使用:
date +'Today is %c. A fine day.'
Run Code Online (Sandbox Code Playgroud)
避免一个可以学习的过程是一个重要的学习考虑因素,即使它在这个孤立的例子中没有太大的区别.)
gtu*_*rri 45
$() 意思是:"首先对此进行评估,然后评估其余部分".
例如:
echo $(pwd)/myFile.txt
Run Code Online (Sandbox Code Playgroud)
将被解释为
echo /my/path/myFile.txt
Run Code Online (Sandbox Code Playgroud)
另一方面${}扩展变量.
例如:
MY_VAR=toto
echo ${MY_VAR}/myFile.txt
Run Code Online (Sandbox Code Playgroud)
将被解释为
echo toto/myFile.txt
Run Code Online (Sandbox Code Playgroud)为什么我不能用它
bash$ while ((i=0;i<10;i++)); do echo $i; done
我担心的答案只是just的bash语法与for while的语法不同for.
| 归档时间: |
|
| 查看次数: |
73207 次 |
| 最近记录: |