命令s标志输出的Zsh参数扩展不起作用

时间:2016-10-05 17:39:38

标签: shell zsh parameter-expansion

在zsh中,如果我跑:

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

我按预期得到foow会导致索引引用单词s:, :使,成为单词分隔符。

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

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

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

我在这里做错了什么?

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

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

1 个答案:

答案 0 :(得分:0)

字段拆分在索引操作启动之前完成,因此您看到的行为就是我所期望的。您可以通过

获得预期的结果
echo ${"$(echo "foo, bar")"[(ws:, :)1]}

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

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

这确实工作。我不知道为什么......