8

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

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

echo ステートメントが実行されないため、これは false を返します。ただし、これを行うと、両方に対して 4 が生成されます。

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

ここで何が問題なのですか?文字列と整数に関係がありますか?

4

2 に答える 2

12

あなたの中で:

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
于 2012-10-27T16:17:00.617 に答える
5

bashのmanページによると:

${#name[subscript]} は ${name[subscript]} の長さに展開されます。添字が * または @ の場合、展開は配列内の要素の数です。添字なしで配列変数を参照することは、添字 0 で配列を参照することと同じです。

${name}インデックス配列で使用すると になり、配列全体の要素を数えず${name[0]}に、 の長さを取得します。${name[0]}したがって、文字列と整数の比較については問題ありません。私の知る限り、「文字列内の整数」と「letによって割り当てられた整数」を比較することは、bashスクリプトでは決して問題になりません。

于 2014-01-23T07:56:55.613 に答える