bash 人说变量扩展发生在命令替换之前。我正在寻找一个可以清楚地说明这一点的例子。所以我尝试了这个:
root@antec:/# var=1
root@antec:/# echo $(var=2; echo $var)
2
root@antec:/#
我期待 bash 做:
1) 在替换中用“1”替换 $var
2) 执行 echo $(var=2; echo 1)
显然这不是 bash 正在做的..
有人可以解释一下这里发生了什么吗?如果有人有一个例子显示变量扩展优先于命令替换,那也很好
最佳答案
我不知道 bash 手册页在说什么。
POSIX specification for the shell说:
The order of word expansion shall be as follows:
- Tilde expansion, parameter expansion, command substitution, and arithmetic expansion shall be performed, beginning to end.
- Field splitting shall be performed on the portions of the fields generated by step 1, unless IFS is null.
- Pathname expansion shall be performed, unless set -f is in effect.
- Quote removal shall always be performed last.
这很清楚变量扩展(又名“参数扩展”)与命令扩展(“命令替换”)同时发生,而不是之前或之后。
所以我认为您要求的示例不存在。
关于bash - 变量扩展和命令替换之间的扩展顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891308/