* 部分一致で検索する [#s9cd85d2]


** grepを使って [#wc3f7c60]

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


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

 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とする。

*** ベンチマーク [#bd4ec0d5]
 # grep
 real    0m4.484s
 user    0m0.234s
 sys     0m2.203s
 
 # bash =~
 real    0m2.823s
 user    0m0.188s
 sys     0m1.203s

- 予想通り、bashの機能を使った方が速そうだ。

** パス名展開を使って [#b23c367d]

 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 もしくは すべて
- など

*** 参考 [#sfc6d67f]
- http://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs
- http://stackoverflow.com/questions/21112707/check-if-a-string-matches-a-regex-in-bash-script

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