在同一子shell中分配和使用变量

fed*_*qui 7 bash scope subshell

我正在做一些非常简单的事情:v=5 echo "$v"并期望它打印出来5.但事实并非如此.刚刚设置的值不适用于下一个命令.

最近了解到 " 在大多数shell中,管道的每个命令都在一个单独的SubShell中执行 ".但是,在这种情况下,两个命令都在同一个子shell中执行.

为什么会这样?有没有办法让这个工作?

完整示例:

$ v=1
$ v=5 echo "$v"
1                   # I expected 5!
Run Code Online (Sandbox Code Playgroud)

Adr*_*der 6

简而言之,在调用命令之前评估"$ v",而命令前面加上"v = 5"会修改正在运行的命令的环境.

正如Charles Duffy所说,你可以添加一个中间的"sh"过程,用一个类似的语法来评估变量,但是你可能想要做一些更复杂的事情,如果你仍然遇到麻烦,知道怎么回事会很有用.