命令替换和空格

命令替换和空格

为什么它可以用作计算器:

[root@qabun02 ~]# echo $(( 5+2  ))
7

但这不是吗?

[root@qabun02 ~]# echo $( (5+2) )
-bash: 5+2: command not found

我能看到的唯一区别是括号之间没有空格?

还:

[root@qabun02 ~]# echo $(who) root pts/0 2015-01-28 09:53 (10.40.0.115) [root@qabun02 ~]# echo $((who)) 0

命令替换如何响应((( (

答案1

问题是$(启动命令替换而$((启动算术扩展。

$( (5+2) )是命令,即子 shell 中的(5+2)命令。5+2但这不是一个有效的命令。

$((who))who被替换为可能未定义的变量值,即 0。

答案2

在bash中:

$(...)表示子命令替换(类似于“...”);

$((...))表示算术求值替换;

${...}表示变量/参数替换;

应该$((被视为字符的原子序列(必须以 结尾))),它绝不等同于$ ((,$( ($ ( (

OBS:如果没有$紧接其前面的内容,a(只是 a (,可以在$((...))块内使用来确定算术评估的优先级(就像$(( (3+4)*5 ))$(( 3+4*5 )).

相关内容