部分一致で検索する

grepを使って

 if $(echo $TERM | grep xterm > /dev/null) ; then
     echo OK
 fi

Bashの正規表現マッチオペレーター(=~)を使って

 TERM=xterm
 if [[ "$TERM" =~ ^x ]]; then
   echo OK
 fi
   => OK
 TERM=xterm
 if [[ "$TERM" =~ ^x ]] && echo OK || echo NO
   => OK
 TERM=xterm
 OS=Linux
 [[ "$TERM" =~ ^x && "$OS" = "Linux" ]] && echo OK
   => OK
  • ifに続く条件式は複合コマンド[[ ]]を使う。testコマンド[]ではダメ。
  • 正規表現は引用符で包まない。"^x"はダメ。^xとする。

ベンチマーク

 # grep
 real    0m4.484s
 user    0m0.234s
 sys     0m2.203s
 
 # bash =~
 real    0m2.823s
 user    0m0.188s
 sys     0m1.203s
  • 予想通り、bashの機能を使った方が速そうだ。

パス名展開を使って

 case "$TERM" in
   *256color)
     echo "DEBUG: 256color"
     ;;
   xterm*)
     echo "DEBUG: xterm*"
     ;;
   ?term)
     echo "DEBUG: ?term"
     ;;
   *)
     echo "DEBUG: *"
     ;;
 esac
  • 環境変数$TERMがマッチするのは、上から、
  • TERM=xterm-256color
  • TERM=xterm もしくは xterm-16color
  • TERM=kterm
  • TERM=teraterm もしくは すべて
  • など

参考


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2018-05-11 (金) 07:38:20