bash man说变量扩展发生在命令替换之前。我正在寻找一个清楚地展示它的例子。所以我试过这个:
root@antec:/# var=1
root@antec:/# echo $(var=2; echo $var)
2
root@antec:/#
我期待bash做:
1)在替换中将$ var替换为“1”
2)执行echo $(var = 2; echo 1)
显然这不是bash正在做的事情。
有人可以解释一下这里有什么?如果某人有一个示例显示变量扩展优先于命令替换,那么它也会很好
答案 0 :(得分:2)
我不知道bash手册页是在说什么。
POSIX specification for the shell说:
词扩展的顺序如下:
- Tilde扩展,参数扩展,命令替换和算术扩展 应该从头到尾进行。
- 应在现场进行分段 除非IFS为空,否则由步骤1生成的部分字段。
- 应执行路径名扩展, 除非set -f生效。
- 引用删除应始终执行。
醇>
这很清楚,变量扩展(又称“参数扩展”)与命令扩展(“命令替换”)同时发生,而不是在之前或之后。
所以我认为你要求的例子不存在。
答案 1 :(得分:0)
发生了什么:
a)执行$()表达式
b)var=2
中的变量被替换
c)执行var=2
d)echo $var
中的变量被替换
e)执行echo 2
我认为变量扩展的一个很好的例子是:
foo=echo; echo $($foo)