次のコードは、私が入力した数に関係なく「奇数」を印刷しますが、偶数を引数として指定した場合、なぜ「偶数」を印刷しないのですか?
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より優れているのですか?」。