推定要素数の2倍の配列の計算

推定要素数の2倍の配列の計算

bash要素数の代わりに配列の単語数を数えるように見えるのはなぜですか?

touch '1 red' '2 orange' '3 yellow'        # Three filenames, each of two words

files=( * )                                # Get the set of files
echo "#files is ${#files}"

for (( i=0; i <= ${#files}; i++ ))
do
    printf "%d\t%s\n" $i "${files[$i]}"
done

この出力は「間違っている」ようです。まず、${#files}包含は5に6つの要素があることを示します${files[@]}。ただし0、要素にのみデータが含まれており、1正しいファイル名が含まれています。2${files[@]}

#files is 5
0       1 red
1       2 orange
2       3 yellow
3
4
5

私は6${files[@]}つの単語1、、、、、、、、またはredのいずれかを含むと予想しました。この混合シナリオはありません。2orange3yellow${#files}2

誰かが私にこれを説明できますか?

ベストアンサー1

${#files}は配列の最初の要素の長さ、つまりの長さです1 red。 5つです。

~から手動:

${#name[subscript]} は ${name[subscript]} の長さに拡張されます。下付き文字が「@」または「*」の場合、配列内の要素数に拡張されます。 [...]
添字なしで配列変数を参照することは、添字 0 を持つ配列変数を参照するのと同じです。

したがって${#files}= ${#files[0]}。ただし、${#files[@]}orは${#files[*]}配列の要素数を提供します。

(単語数とは関係ありませんが、${files[*]}引用符なしで拡張すると、すべての値に対して一般的な単語分割が行われます。)

おすすめ記事