参数展开后,zsh不按IFS拆分 [英] zsh is not splitting by IFS after parameter expansion

查看:15
本文介绍了参数展开后,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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆