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

从Ruby脚本调用zsh时令人费解的变量扩展行为,ruby,zsh,Ruby,Zsh,我有一个运行zsh命令的Ruby脚本。当我从Ruby调用zsh for循环时,它的变量赋值就不起作用了 # 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"` 这是怎么回事?这是因为shell使用shell变量$x的值展开$x >> p

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

# 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"`

这是怎么回事?

这是因为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"`