LoginSignup
8
8

More than 5 years have passed since last update.

if文内で">"を使うと恐ろしいことが

Posted at

すごくあふぉなことをしたので、自戒を込めて投稿します。

3つの引数(整数)を数値の小さい順に並べ替える、という課題です。

# 間違い!
#!/bin/bash
n1=${1:?}
n2=${2:?}
n3=${3:?}
if [ $n1 > $n2 ];then
    tmp=$n1
    n1=$n2
    n2=$tmp
fi
if [ $n2 > $n3 ];then
    tmp=$n2
    n2=$n3
    n3=$tmp
fi
if [ $n1 > $n2 ];then
    tmp=$n1
    n1=$n2
    n2=$tmp
fi
echo $n1 $n2 $n3

シェルスクリプトのtestコマンドに、> というのは指定できません。
このコードを実行すると、2つ目と3つ目に指定した名前のファイルができて、if 文はすべて true になります。
つまり、> はリダイレクトの記号として解釈されるようです。
なぜ test 1test 0 がtrue になるのかはよくわかりませんでした。

正しくは、こう。

# 正しい
#!/bin/bash
n1=${1:?}
n2=${2:?}
n3=${3:?}
if [ $n1 -gt $n2 ];then
    tmp=$n1
    n1=$n2
    n2=$tmp
fi
if [ $n2 -gt $n3 ];then
    tmp=$n2
    n2=$n3
    n3=$tmp
fi
if [ $n1 -gt $n2 ];then
    tmp=$n1
    n1=$n2
    n2=$tmp
fi
echo $n1 $n2 $n3

-gt (is greater than: > )を指定します。

以上です。

8
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8