参数展开后,zsh不按IFS拆分 [英] zsh is not splitting by IFS after parameter expansion
本文介绍了参数展开后,zsh不按IFS拆分的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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此处?
推荐答案
是。Zsh选择了自己的方式。
以下是zsh常见问题条目: "3.1: Why does $var where var="foo bar" not do what I expect?"在此特定情况下,您可以通过将-y
选项添加到zsh
调用:
$ zsh -y foo.sh
arg: foo
arg: bar
arg: baz
您可以查看the zsh's faq,特别是第2章和第3章。 您对其他shell的体验越多,就越能发现zsh的陷阱。
这篇关于参数展开后,zsh不按IFS拆分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文