zshスクリプトを介して "*"(ワイルドカード)を含む変数を渡そうとしましたが、うまくいきませんでした。 ls、grep、およびその他のコマンドは、「*」を含むパスに関する苦情を表示します。
以下は簡単な問題の例です。
➜ ~ mkdir -p /tmp/TEST/{22,3}
➜ ~ ls -l /tmp/TEST/*
/tmp/TEST/22:
/tmp/TEST/3:
➜ ~ TEST_PATH="/tmp/TEST/*"
➜ ~ ls -l $TEST_PATH
ls: /tmp/TEST/*: No such file or directory
ベストアンサー1
他のsh-likeシェルとは異なり、zshは引用符で囲まれていない変数を拡張するときにワイルドカード拡張とトークン化を実行しません。引用符がないと$TEST_PATH
直感的に期待できるものとほぼ同じです。つまり、変数の値を単純に置き換えることです。 「ほぼ」は、結果が空の単語の場合、その単語が完全に削除されるためです。
変数の値を取得してその中のワイルドカード文字を拡張するには、${~…}
次の形式を使用します。パラメータ拡張:${~TEST_PATH}
中かっこなしで書くことができます$~TEST_PATH
。
一致するものがない場合、$~TEST_PATH
エラーが発生します。空のリストを取得するには、次のようにします。N
グローバル予選:$~TEST_PATH(N)