我从shell脚本开始,我不明白
之间的区别 $(var), "$(var)", $(( var ))
或仅在条件限制中。像
while [ condition ] while (( condition)) or while (condition)
我一直在谷歌搜索但没有...
答案 0 :(得分:3)
$(var)
是命令变量 - 它将执行名为var
的命令并将输出放入当前命令。例如:
getent passwd $(whoami)
"$(var)"
与上面相同,除了引号,命令输出将作为单个单词替换为当前命令。考虑
printf "%s\n" $(uname -a)
和
printf "%s\n" "$(uname -a)"
$(( var ))
是算术扩展,其中评估var
变量中包含的算术表达式。例如:
var='6*7'
echo "$((var))"
一般情况下,除非您需要某些特定的副作用,否则请引用扩展名:Security implications of forgetting to quote a variable in bash/POSIX shells
对于while
(以及if
),下一部分是命令。条件分支将由命令的退出状态确定:0为“true”,其他任何内容为“false”。
恰好[
是test
命令的别名(条件是[
的最后一个参数必须是]
)
这两个while循环在它们的无限中是等价的:
while true; do ...
while [ 1 -eq 1 ]; do
while [ $(id -u root) = "0" ]; do ...
使用单个括号将while
后面的命令管道放入子shell中。子shell结束时,子shell中对shell所做的更改会消失。例如,要在/ tmp中有超过10个文件时循环,我们可以这样做:
while (cd /tmp; n=(*); [ "${#n[@]}" -gt 10 ]); do ...
当子shell退出时,当前目录不再是/ tmp,变量n不存在。
双括号表示算术表达式:
while (( x * y < 100 )); do ...