gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 04:18:56 24 4
gpt4 key购买 nike

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:

  1. Tilde expansion, parameter expansion, command substitution, and arithmetic expansionshall be performed, beginning to end.
  2. Field splitting shall be performed on theportions of the fields generated by step 1, unless IFS is null.
  3. Pathname expansion shall be performed,unless set -f is in effect.
  4. Quote removal shall always be performed last.

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

所以我认为您要求的示例不存在。

关于bash - 变量扩展和命令替换之间的扩展顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6891308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com