在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)
答案 0 :(得分:0)
字段拆分在索引操作启动之前完成,因此您看到的行为就是我所期望的。您可以通过
获得预期的结果echo ${"$(echo "foo, bar")"[(ws:, :)1]}
除了一个注释:我的第一次尝试是使用参数替换的?{== ...} 形式重写表达式,这种形式应该禁止字段拆分,即
echo ${${==$(echo "foo, bar")}[(ws:, :)1]}
这确实不工作。我不知道为什么......