私の問題を説明する簡単なbashを見つけました。
#!/bin/sh
str1="Learn Bash"
str2="Learn Bash"
if (( "$str1" == "$str2" )); then
echo "Both Strings are Equal."
else
echo "Both Strings are not Equal."
fi
結果:
if_equal.sh: 6: if_equal.sh: Learn Bash: not found
Both Strings are not Equal.
基本的に私はawkの結果をfloatと一度比較し、ユーザーが提供した整数と比較したいので、いつ使用できますか?
[ "$c" -gt "$o" ]
ただし、浮動小数点では機能せず、次のように3番目の変数を使用して繰り返すこともできません。
[ "$c" -gt "$o" ] && echo fine || [ "$b" -gt "$o" ] && echo better
すべての空白をチェックし、"、[]、()、(())を使用または使用せずに試みました。ifで最初の変数が見つからなかった理由が見つかりません。ところで、私のスクリプトはファイルを生成します。
if (( "$c" > "0.9500" ))
たぶん解決策がありますか?
ベストアンサー1
、算術評価bash
です。 -lineのため、スクリプトが使用するシェルであるシェル(( ... ))
では、2つのネストされたサブシェルとして解釈される可能性が高くなります。これがシェルを使用して実行するとファイルが呼び出される理由です。これは比較演算子ではなくI / Oリダイレクトであり、コマンドとして解釈されるため、「見つかりません」というエラーメッセージが表示されます。sh
#!
0.9500
(( "$c" > "0.9500" ))
sh
>
$c
シェルでsh
文字列を比較するには、次のようにします。
[ "$str1" = "$str2" ]
整数を比較するには、次のようにします。
[ "$num1" -gt "$num2" ]
シェルではbash
上記の構文を使用することもできますが、次のものを使用することもできます。
[[ "$str1" == "$str2" ]]
2つの文字列が等しいかどうかを比較します。
(( num1 > num2 ))
2 つの整数を比較します。
シェルには、bash
文字列以外の方法で浮動小数点数を処理する機能はありません。
シェルの浮動小数点数を比較するにはawk
。
if awk -v num1="$num1" -v num2="$num2" 'BEGIN { exit !(num1 > num2) }'
then
printf '%s is greater than %s\n' "$num1" "$num2"
else
printf '%s is not greater than %s\n' "$num1" "$num2"
fi
比較のブール結果を!
シェルの終了状態に変換するには、反転する必要があります。
関連: