「標準」* NIXシェルを使用している場合は、アレイの便利なbash機能に慣れていない可能性があります。bashの配列は、P言語(Perl、Python、PHP)やその他のプログラミング言語ほどクールではありませんが、多くの場合便利です。
Bash配列には数値インデックスのみがありますが、それらはオプションです。つまり、すべてのインデックスの値を明示的に定義する必要はありません。エントリを括弧で囲むことにより、配列全体を定義できます。
arr=(Hello World)
個々のレコードは、使い慣れた構文を使用して定義できます(BASIC(Dijkstraを許してください-翻訳者のメモ)からFortranまで)。
arr[0]=Hello
arr[1]=World
ただし、反対は比較的醜いように見えます。特定のエントリを参照する必要がある場合は、次のようにします。
echo ${arr[0]} ${arr[1]}
マンページから:
「ファイルへのフルパスを展開するときの競合を防ぐために、中括弧が必要です。」
さらに、次の奇妙な構造が利用可能です。
${arr[*]} #
${!arr[*]}#
${#arr[*]}#
${#arr[0]}# ( )
$ {!arr [*]}はbashに比較的新しく追加されたものであり、元の実装の一部ではありません。次の構成は、配列の簡単な使用例を示しています。「[index] = value」に注意してください。これにより、特定のレコード番号に特定の値を割り当てることができます。
#!/bin/bash
array=(one two three four [5]=five)
echo "Array size: ${#array[*]}" #
echo "Array items:" #
for item in ${array[*]}
do
printf " %s\n" $item
done
echo "Array indexes:" #
for index in ${!array[*]}
do
printf " %d\n" $index
done
echo "Array items and indexes:" #
for index in ${!array[*]}
do
printf "%4d: %s\n" $index ${array[$index]}
done
:スクリプトを実行すると、次のような出力が生成されます
配列サイズ:5つの
配列項目:
1つの
2
3
4
5
配列のインデックス:
0
1
2
3
5
アレイアイテムとインデックス:
0:1
1:2
2:3
3:4
5:5
なお{arr [*]}のような構成では、「*」の代わりに「@」文字を使用できます。引用されたエントリの展開を除いて、結果は同じになります。 「$ *」と「$ @」は引用符で囲まれたエントリを返し、「$ {arr [*]}」は各エントリを1つの単語として返し、「$ {arr [@]}」は各エントリを個別の単語として返します。
次の例は、引用符と引用符で囲まれていない構成が文字列を返す方法を示しています(これらの文字列にスペースが含まれている場合は特に重要です)。
#!/bin/bash
array=("first item" "second item" "third" "item")
echo "Number of items in original array: ${#array[*]}"
for ix in ${!array[*]}
do
printf " %s\n" "${array[$ix]}"
done
echo
arr=(${array[*]})
echo "After unquoted expansion: ${#arr[*]}"
for ix in ${!arr[*]}
do
printf " %s\n" "${arr[$ix]}"
done
echo
arr=("${array[*]}")
echo "After * quoted expansion: ${#arr[*]}"
for ix in ${!arr[*]}
do
printf " %s\n" "${arr[$ix]}"
done
echo
arr=("${array[@]}")
echo "After @ quoted expansion: ${#arr[*]}"
for ix in ${!arr[*]}
do
printf " %s\n" "${arr[$ix]}"
done
起動時の出力:
元の配列のアイテム数:4つの
最初のアイテム
2番目のアイテム
3番目の
アイテム
引用符で囲まれていない展開後:6つの
最初の
アイテム
2番目の
アイテム
3番目の
アイテム
後*引用符付きの展開:1つの
最初のアイテム2番目のアイテム3番目のアイテム
@引用符付きの展開後:4つの
最初のアイテム
2番目アイテム
3番目の
アイテム