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 に答える