部分一致で検索する

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 (66d)