「入門 bash」ISBN4-900900-78-8 の128ページに
文字列比較演算子として以下のような表があります。
演算子 |真の場合
------------+--------------------------------------
str1 = str2 |str1がstr2と一致する
str1 != str2|str1がstr2と一致しない
str1 < str2 |str1がstr2より小さい
str1 > str2 |str1がstr2より大きい
-n str1 |str1がNULLではない (長さが0より大きい)
-z str1 |str1がNULLである (長さが0)
手元の bash 2.05 では、
「=」や「!=」といった演算子は普通に動くのですが、
「<」や「>」は常に0を返してきてまともに機能してい
ないように見えます。
$ [ a > b ]; echo $?
0
$ [ a < b ]; echo $?
0
$ [ b > a ]; echo $?
0
$ [ b < a ]; echo $?
0
この「<」とか「>」とかいった演算子は、どのように
使用すれば、機能するのでしょうか?
それともバージョンによって動作が違うのでしょうか?
--
Tanaka-Qtaro-Yasuhiro mailto:ta...@ca2.so-net.ne.jp
素人推測ですが
>> $ [ a > b ]; echo $?
>> 0
>> $ [ a < b ]; echo $?
>> 0
>> $ [ b > a ]; echo $?
>> 0
>> $ [ b < a ]; echo $?
>> 0
a とか b というファイルが新しくできてませんか?
(できちゃだめです)
--
kabe
> この「<」とか「>」とかいった演算子は、どのように
> 使用すれば、機能するのでしょうか?
shell が redirection operator として解釈してしまわないようにして、きち
んとコマンド(この場合は test コマンド)に渡してあげれば機能します。たと
えば、エスケープしたり quote してあげればコマンドに渡ります。
$ echo a \> b
a > b
$ echo a '>' b
a > b
なにもしないとコマンドに渡らず shell が解釈してしまうので、
$ echo a > b
$ ls
b
$ cat b
a
$
となる。
bash$ [ a '>' b ]; echo $?
1
bash$
--
池田研二 稲城駅前在住
> a とか b というファイルが新しくできてませんか?
> (できちゃだめです)
「<」を先に試せばよかったのにね :-)
「if [ a '<' b ]; then echo y; fi」とかOKでした。 久野
皆さん、フォローありがとうございました。
ku...@gssm.otsuka.tsukuba.ac.jpさんの<bcsiia$q...@utogw.gssm.otsuka.tsukuba.ac.jp>から
>ka...@sra-tohoku.co.jpさん:
>> a とか b というファイルが新しくできてませんか?
>> (できちゃだめです)
できてました。お恥ずかしい…
> 「<」を先に試せばよかったのにね :-)
$ [ a < b ]; echo $?
bash: b: No such file or directory
1
うう、なるほど (^^;
> 「if [ a '<' b ]; then echo y; fi」とかOKでした。 久野
そういうことだったんですね。
--
Tanaka-Qtaro-Yasuhiro mailto:ta...@ca2.so-net.ne.jp