if(var1 var2比較)「var1が見つかりません」エラー

if(var1 var2比較)「var1が見つかりません」エラー

私の問題を説明する簡単な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

比較のブール結果を!シェルの終了状態に変換するには、反転する必要があります。

関連:

おすすめ記事