为什么它可以用作计算器:
[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 ))
.