#author("2024-10-01T10:57:39+09:00","default:yakumo_murakami","yakumo_murakami")
#author("2024-10-01T11:13:51+09:00","default:yakumo_murakami","yakumo_murakami")
[[Shell]]

* if文の比較要素 [#f72b4fbd]

#contents

** 数値 [#y028bdc4]

,A -eq B,とBが等しければ true,equal,=
,A -ne B,とBが等しくなければ true,not equal,!=
,A -gt B,がBより大なら true,greater than,>
,A -ge B,がB以上なら true,greater than or equal,>=
,A -lt B,がBより小なら true,less than,<
,A -le B,がB以下なら true,less than or equal,<=

** 文字列 [#x04530ef]

*** 一致 [#xa66f1af]

 if [ ${A} == "ABC" ];then...

*** 不一致 [#d73adf5b]

 if [ ${A} != "ABC" ];then...

** 正規表現 [#k6fd008e]

 if [[ ${A} =~ ^[ABC]+$ ]];then...

否定はちょっとわからなかった。

** and or [#ff7b6d66]

*** AND [#l3a6d406]

 $ [ ${A} == "ABC"  -a 1 -eq 1 ];echo $?
 1
 $

*** OR [#z0e7f6ec]

 $ [ ${A} == "ABC"  -o 1 -eq 1 ];echo $?
 0
 $

** 別の書き方 [#w9e6560a]

 A="ABCDEFG H"
 if [[ "${A}" =~ ^[A-Z]+$ ]] || [[ "${A}" =~ ABC ]];then
   echo "OK"
 fi
 if [[ "${A}" =~ ^[A-Z]+$ ]] && [[ "${A}" =~ ABC ]];then
   echo "OK"
 else
   echo "NG"
 fi
 if [[ "${A}" =~ ABC ]];then
   echo "OK"
 else
   echo "NG"
 fi

*** 実行結果 [#see8bb65]

 $ sh  ~/bin/test99.sh
 OK
 NG
 OK

* 注意 [#u19d0693]

ただし、and or で -a や -o を使う場合は以下に注意。

** 引用元 [#zccae8ee]

- https://pubs.opengroup.org/onlinepubs/9699919799/help/codes.html#OB

> Obsolescent [Option End]
The functionality described may be removed in a future version of this volume of POSIX.1-2017. Strictly Conforming POSIX Applications and Strictly Conforming XSI Applications shall not use obsolescent features.

> (和訳)廃止予定[オプション終了]
記載されている機能は、POSIX.1-2017 のこの巻の将来のバージョンで削除される可能性があります。厳密に準拠する POSIX アプリケーションおよび厳密に準拠する XSI アプリケーションでは、廃止予定の機能を使用しないでください。

ふむ。


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