[[...]]のZSH拡張変数はグローブを行いません。

[[...]]のZSH拡張変数はグローブを行いません。

.zshrcにextend_globを設定しました。

これは期待どおりに機能します。

[[ "value" = [a-z]* ]] && echo "globbed"

「globbed」を印刷します。

しかし、次はそうではありません。

foo=[a-z]*
[[ "value" = $foo ]] && echo "globbed"

何も印刷しません。
なぜそんなことですか?これを行うには、.zshrcに何を設定する必要がありますか?

ベストアンサー1

zshマニュアルで(ハイライト):

${~spec}
GLOB_SUBST評価オプションをオンにしますspec。倍増したら ~オフにしてください。このオプションを設定すると、拡張で生成された文字列はパターンとして解釈されます。ファイル名の拡張、ファイル名の生成など、可能なすべての場所=条件でのand演算子の右側のようなパターンマッチングコンテキスト!=

これは、以下を使用する必要があることを意味します。

foo='[a-z]*'
[[ "value" = ${~foo} ]] && echo 'matched'

...変数の文字列をfooパターンとして使用することを明示的に許可します。

上記のコードは、matched文字列が変数valueに格納されているパターンと一致するかどうかを印刷しますfoo。ファイル名のグロービングはここには関係ありません。また、見ることができます以下はStéphaneのコメントです。

おすすめ記事