zsh条件式のパターンマッチング

zsh条件式のパターンマッチング

zshのフック機能でパターンマッチングに問題がありますprecmd。私は以下を持っています:

precmd(){
   local x='test'
   if [ $x = '*test*' ]; then
      echo 'hello'
   fi
}

helloを印刷しません。私はこのコードをうまく機能する一般的なコードでテストし、正規表現なしで試してみましたが、うまく印刷されましzsh test.zshprecmd。これが期待どおりに機能しない理由についての手がかりはありますか?

$ zsh --version
zsh 4.3.11 RHEL 

ベストアンサー1

[ $x = '*test*' ]拡張文字列$x(たとえばtext)が拡張文字列'*test*'(たとえば)と同じかどうかをテストします*text*

変数の値がx一致するかどうかをテストします。模様 *test*=、or==演算子を使用する必要があります。zsh条件式、含まれる二重括弧 [[ … ]]。また、パターンの特殊文字は引用符を解決する必要があります。それ以外の場合、特殊文字はそれ自体を表します。したがって:

if [[ $x == *test* ]]; then …

条件式の構文は、単一の角かっこ内で使用できる式の構文と似ています[ … ]が、同じではありません。[これは通常のコマンドのように解析され、実際には次の単一文字名を持つ組み込みコマンドです。test組み込みただし、最後には、内部的にシェル特殊文字を含めることができる固有の構文構造である追加の[パラメータが必要です]。一致するファイル名(ワイルドカード)のリストに展開され、組み込み関数は最終的に結果を解析します。条件式解析の一部として解析され、ワイルドカードは呼び出されません。[[ … ]][ $x = *test* ]*test*test[[ $x = *test* ]]*test*

おすすめ記事