2012-10-27 6 views
5

bash配列の長さがbash変数(int)と等しいかどうかをチェックしたいと思います。現在のコードは次のようになります。配列の長さがbashの変数と等しいかどうかを確認する

if [ "${#selected_columns}" -eq "${number_of_columns}" ]; then 
    echo "They are equal!" 
fi 

echo文が実行されないため、このコードはfalseを返します。ただし、これを行うと、両方の場合に4が生成されます。

echo "${#selected_columns[@]}" 
echo "${number_of_columns}" 

ここに間違いがありますか?文字列とintとの関係は何ですか?あなたに

+5

最初の例で '[@]'がありませんか? – Junuxx

+0

'if $ {#selected_columns [@]}" -eq "$ {number_of_columns}"];その後、 –

+0

ええ、ちょうど愚かなタイプミス。ありがとう! –

答えて

5

if [ "${#selected_columns}" -eq "${number_of_columns}" ]; then 
    echo "They are equal!" 
fi 

${#selected_columns}[@]が不足しています。固定

if [ "${#selected_columns[@]}" -eq "${number_of_columns}" ]; then 
    echo "They are equal!" 
fi 
+0

答えを返信しなかったのはなぜですか? StackOverflowは、元の質問者に加えて、他の人の利益のために質問に答えることについてです。誰かが質問の下でコメントを読んでいないかもしれませんし、まだ答えが出ていないことを見て、何も新しいことを学ぶことなく放置するかもしれません。 (私は半分の方法で解決策を入力していないまであなたのコメントを逃した)答えにあなたのコメントを移動し、あなたが望むなら、私はあなたをupvoteよ。 –

+0

あなたはこの問題について強く感じていると思います。答えとしてあなたのコメントを投稿してみませんか?それがあなたを幸せにするなら、自分の答えを削除しますか? =) –

+0

ナー、あなたはすでに汚い仕事をした。今何が間違っていたかを簡単に確認できます。 –

2

のbashのmanページによると:

$ {#名[添字]} $ {名[添字]}の長さに展開されます。添字が*または@の場合、展開は配列内の要素の数です。添字なし配列変数を参照すること${name[0]}になりますインデックスアレイ上${name}を使用して0

の添字を持つ配列を参照するに相当し、その後、あなたは全体の配列の要素を数えていない、${name[0]}の長さを得ました。だから、文字列を整数と比較することは問題ではありません。 AFAIKは、 "文字列の整数"を "letによって割り当てられた整数"と比較することは、bashスクリプトでは決して問題にはなりません。

関連する問題