web-dev-qa-db-ja.com

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

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

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

こんにちはこんにちは表示されません。私はこのコードを正常に動作する通常のzsh test.zshでテストし、precmdの正規表現を使用せずに試し、うまく出力できるようにしました。なぜこれが期待どおりに機能しないのかについての手がかりはありますか?

$ zsh --version
zsh 4.3.11 RHEL 
2
Tyler Kelly

*test*は有効な正規表現パターンではありません。 *は繰り返し演算子であり、繰り返す必要があります。 .*test.*が必要になる可能性は非常に高いですが、デフォルトではアンカーされていないため、正規表現では必要ありません。 testを探すだけです

ただし、正規表現パターンを=演算子と照合することはできません。=~が必要です。

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