if 問い合わせ形式に関する質問

if 問い合わせ形式に関する質問

次のコードは、私が入力した数に関係なく「奇数」を印刷しますが、偶数を引数として指定した場合、なぜ「偶数」を印刷しないのですか?

if [[ 'echo "$1%2" | bc' =~ 0 ]]
then
        echo "Even"
else
        echo "Odd"
fi

ベストアンサー1

正規表現を次のように0組み合わせています。ひも echo "$1%2" | bc。文字列にaが含まれていないため、分岐が0実行elseされます。

数値が奇数か偶数かをテストするには、$1算術テストを使用します。

if (( $1 % 2 == 0 )); then
    echo even
else
    echo odd
fi

この(( ... ))ビットは算術評価です。内部式を評価し、その値はその式の結果になります。これにより、ステートメントはif結果に対してアクションを実行できます。

bc意図したとおりに使用してください。

if [ "$( printf '%s %% 2\n' "$1" | bc )" -eq 0 ]; then
    echo even
else
    echo odd
fi

すなわち、命令置換(bit $(...))を用いて命令を実行した結果を代入した後-eq(算術比較のため)これを用いて0と比較する。

printf使用するのが面白いと感じたら使用してください。

if [ "$( echo "$1 % 2" | bc )" -eq 0 ]; then
    echo even
else
    echo odd
fi

でも見てください」なぜprintfがechoより優れているのですか?」。

おすすめ記事