ZSHがコマンドでパスとして使用される変数のワイルドカードを解釈する方法

ZSHがコマンドでパスとして使用される変数のワイルドカードを解釈する方法

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)

おすすめ記事