在$(var)," $(var)",$((var)),((条件))等之间的差异是什么?

时间:2018-06-02 17:21:46

标签: shell unix

我从shell脚本开始,我不明白

之间的区别

$(var), "$(var)", $(( var ))

或仅在条件限制中。像

while [ condition ] while (( condition)) or while (condition) 

我一直在谷歌搜索但没有...

1 个答案:

答案 0 :(得分:3)

  1. $(var)是命令变量 - 它将执行名为var的命令并将输出放入当前命令。例如:

    getent passwd $(whoami)
    
  2. "$(var)"与上面相同,除了引号,命令输出将作为单个单词替换为当前命令。考虑

    之间的区别
    printf "%s\n" $(uname -a)
    

    printf "%s\n" "$(uname -a)"
    
  3. $(( var ))是算术扩展,其中评估var变量中包含的算术表达式。例如:

    var='6*7'
    echo "$((var))"
    
  4. 一般情况下,除非您需要某些特定的副作用,否则请引用扩展名: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 ...