2017-11-29 1 views
1

bash if文を使用して、2つの異なる配列の2つの数値が等しいかどうかを確認します。文が偽と評価される(つまり、2つの数字が等しくない)条件では、コンソールは構文エラーを表示するようです。問題のbash if文がコンソールで構文エラーを返しますが、正しく動作します

コード:

for((i=0;i<=passes256Size;i+=1));do 
    if((${passes212[$i]}==${passes256[$i]})); then 
     passesBoth[$i]=${passes256[$i]}  
    fi 
done 

エラー:

./partii.sh: line 46: 102==: syntax error: operand expected (error token is "=") 
./partii.sh: line 46: ==103: syntax error: operand expected (error token is "==103") 

プログラムがまだしかし、私はそれらの2つのエラーは、実行時に来てもらう、実行され、私に望ましい結果を提供します。この問題を解決する方法はありますか?

+0

try: 'if(($ {passes212 [$ i]} == $ {passes256 [$ i]}))'。スペースに気をつけてください。 – aquaman

+0

空白で試してみましたが、私はまだ同じエラーが出ますが、エラーには余分なスペースが含まれています== – toldom

答えて

2

bashの算術コンテキストを使用して、2つの数値が等しいかどうかをテストしようとしています。エラーメッセージを簡略化して見てみましょう:

$ ((2==)) && echo yes 
bash: ((: 2==: syntax error: operand expected (error token is "==") 
$ ((==2)) && echo yes 
bash: ((: ==2: syntax error: operand expected (error token is "==2") 

上記のエラーメッセージは、あなたが観察したエラーメッセージとかなりよく似ています。

以下は、当然のことながら、期待通りに動作します:あなたが${passes212[$i]}または${passes256[$i]}のいずれかの値がであること、観測によってそのメッセージに、と思わ

$ ((2==2)) && echo yes 
yes 

はさんが再びこれを試してみましょうが、割り当てられた値の有無にかかわらず、変数を使用して:

$ x=2; y=""; (($x==$y)) && echo yes 
bash: ((: 2==: syntax error: operand expected (error token is "==") 
$ x=""; y=2; (($x==$y)) && echo yes 
bash: ((: ==2: syntax error: operand expected (error token is "==2") 

変数の値が空の場合、当方は一切の変数が全く存在しない時には、上記と同じエラーメッセージを取得します。これは私たちの診断を確認するようです。

解決策は、両方の配列に値が割り当てられていることを確認することです。

+1

これは私の問題でした。アレイはサイズが違っていて、要素が空の要素と一致していました。ありがとうございました! – toldom

関連する問題