[ -a ]
シェルスクリプトで変数の値が0と100の間にあるかどうか、確認するときはこんなふうに書いたりする。$ i=100 $ if [ $i -ge 0 -a $i -le 100 ] ;then echo "$i"; fi 100
testコマンドの条件の間に -a を入れることによって前後の条件式を and で結んでいる。
ところが。だ。
POSIX 2008
IEEE Std 1003.1-2008, 2016 Editionhttp://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html
test - evaluate expression
operands
によると
expression1 -a expression2
expression1 -o expression2
[OB XSI] Obsolescent
The functionality described may be removed in a future version of this volume of POSIX.1-2008.
となっている。
つまり、そのうちなくなるよってこと。
シェルスクリプトの本でも and, or は [ -a ] [ -o ] を使うよって、書いてあるものもあるのに、なんてこった!
じゃあ、どうするか
じゃあ、どうするかというと、コマンドが成功/失敗した時だけ、次のコマンドを実行する書き方を思い出そう。$ i=100 $ if [ $i -ge 0 ] && [ $i -le 100 ] ;then echo "$i"; fi 100
もちろん、or の場合は || を使おう。
$ if [ "$foo" = 'foo' ] || [ "$foo" = 'bar' ] ;then echo "$foo"; fi
うーん、確かにtestコマンドに複数の条件式を判定させるよりも、こちらの方が理にかなっている気がする。
[参考文献]
Bashのよくある間違い
0 件のコメント:
コメントを投稿