从Ruby脚本调用zsh时令人费解的变量扩展行为

时间:2014-10-05 16:09:27

标签: ruby zsh

我有一个运行zsh命令的Ruby脚本。当我从Ruby调用它时,zsh for-loop中的变量赋值不起作用。

# This just prints three newlines from the three echo invocations
# x does not get assigned to anything
puts `zsh -c "for x in 1 2 3; do echo $x; done"`

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

这是因为shell使用shell变量$x的值扩展$x

>> puts `x=9999; zsh -c "for x in 1 2 3; do echo $x; done"`
9999
9999
9999

您可以使用单引号来阻止它:

puts `zsh -c 'for x in 1 2 3; do echo $x; done'`

或通过转义$

puts `zsh -c "for x in 1 2 3; do echo \\$x; done"`