变量扩展和命令替换之间的扩展顺序

时间:2011-07-31 18:09:17

标签: bash

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正在做的事情。
有人可以解释一下这里有什么?如果某人有一个示例显示变量扩展优先于命令替换,那么它也会很好

2 个答案:

答案 0 :(得分:2)

我不知道bash手册页是在说什么。

POSIX specification for the shell说:

  

词扩展的顺序如下:

     
      
  1. Tilde扩展,参数扩展,命令替换和算术扩展   应该从头到尾进行。
  2.   
  3. 应在现场进行分段   除非IFS为空,否则由步骤1生成的部分字段。
  4.   
  5. 应执行路径名扩展,   除非set -f生效。
  6.   
  7. 引用删除应始终执行。
  8.   

这很清楚,变量扩展(又称“参数扩展”)与命令扩展(“命令替换”)同时发生,而不是在之前或之后。

所以我认为你要求的例子不存在。

答案 1 :(得分:0)

发生了什么:

a)执行$()表达式 b)var=2中的变量被替换 c)执行var=2 d)echo $var中的变量被替换 e)执行echo 2

我认为变量扩展的一个很好的例子是:

foo=echo; echo $($foo)