1

在 zsh 中,如果我运行:

a=$(echo "foo, bar")
echo ${a[(ws:, :)1]}

我得到foo了你所期望w的(导致索引引用单词s:, :成为,单词分隔符)。

但是,如果我尝试结合这些:

echo ${$(echo "foo, bar")[(ws:, :)1]}

我明白了foo,。由于某种原因,该w标志工作正常,但该s:, :标志被完全忽略。

我在这里做错了什么?

更多信息:这只是 ${} 中的 $() 的问题。如果我将 ${} 嵌套在 ${} 中,就不会有这样的问题。

$ zsh --version
zsh 5.2 (x86_64-unknown-linux-gnu)
4

1 回答 1

0

字段拆分是在索引操作开始之前完成的,所以你看到的行为是我所期望的。您可以通过以下方式获得预期结果

echo ${"$(echo "foo, bar")"[(ws:, :)1]}

除了一个注释:我的第一次尝试是使用?{==...}形式的参数替换来重写您的表达式,这应该禁止字段拆分,即

echo ${${==$(echo "foo, bar")}[(ws:, :)1]}

这没有。我不知道为什么...

于 2016-10-06T07:54:10.240 回答