Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

bashの文字列比較

0 views
Skip to first unread message

Tanaka-Qtaro-Yasuhiro

unread,
Jun 19, 2003, 9:35:15 AM6/19/03
to
田中久太郎です。

「入門 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

ka...@sra-tohoku.co.jp

unread,
Jun 19, 2003, 7:07:58 PM6/19/03
to
かべ%/bin/csh使い

素人推測ですが

>> $ [ a > b ]; echo $?
>> 0
>> $ [ a < b ]; echo $?
>> 0
>> $ [ b > a ]; echo $?
>> 0
>> $ [ b < a ]; echo $?
>> 0

a とか b というファイルが新しくできてませんか?
(できちゃだめです)
--
kabe

IKEDA Kenji

unread,
Jun 19, 2003, 10:41:37 AM6/19/03
to
In article <bcse6j$b98$1...@nn-os106.ocn.ad.jp>,
Tanaka-Qtaro-Yasuhiro <ta...@ca2.so-net.ne.jp> writes:

> この「<」とか「>」とかいった演算子は、どのように
> 使用すれば、機能するのでしょうか?

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$

--
池田研二 稲城駅前在住

ku...@gssm.otsuka.tsukuba.ac.jp

unread,
Jun 19, 2003, 10:49:46 AM6/19/03
to
久野です。

ka...@sra-tohoku.co.jpさん:


> a とか b というファイルが新しくできてませんか?
> (できちゃだめです)

「<」を先に試せばよかったのにね :-)

「if [ a '<' b ]; then echo y; fi」とかOKでした。 久野

Tanaka-Qtaro-Yasuhiro

unread,
Jun 20, 2003, 1:11:01 AM6/20/03
to
田中久太郎です。

皆さん、フォローありがとうございました。

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

0 new messages