这是我的代码,用于循环冒号分隔的值并执行某些操作
与每个值。
f()
{
IFS=:
for arg in $1
do
echo arg: $arg
done
}
f foo:bar:baz
这在大多数 POSIX 兼容的 shell 中工作得很好。
$ dash foo.sh
arg: foo
arg: bar
arg: baz
$ bash foo.sh
arg: foo
arg: bar
arg: baz
$ ksh foo.sh
arg: foo
arg: bar
arg: baz
$ posh foo.sh
arg: foo
arg: bar
arg: baz
$ yash foo.sh
arg: foo
arg: bar
arg: baz
但在 zsh 中却没有按预期工作。
$ zsh foo.sh
arg: foo:bar:baz
zsh是否违反了POSIX here?
是的。 Zsh选择了自己的方式。
这是 zsh 常见问题解答条目:“3.1:为什么 $var where var="foo bar" 没有达到我的预期?”
在这种特殊情况下,您可以通过添加-y的选项zsh
调用:
$ zsh -y foo.sh
arg: foo
arg: bar
arg: baz
你可以看一下zsh 的常见问题解答特别是第二章和第三章。
你对其他 shell 的体验越多,就越能发现 zsh 的陷阱。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)