Bashスクリプトで文字列値を収集しようとしています。リストまたは配列構造に文字列値を追加して、それらを最後にエコーアウトできる最も簡単な方法は何ですか?
$ arr=(1 2 3)
$ arr+=(4)
$ echo ${arr[@]}
1 2 3 4
Bashはスパース配列を使用するため、要素カウント${#arr}
をインデックスとして使用しないでください。ただし、次のようなインデックスの配列を取得できます。
$ indices=(${!arr[@]})
foo=(a b c)
foo=("${foo[@]}" d)
for i in "${foo[@]}"; do echo "$i" ; done
イグナシオが別の回答で提案したことを追加するには:
foo=(a b c)
foo=("${foo[@]}" d) # Push element 'd'
foo[${#foo[*]}]="e" # Push element 'e'
for i in "${foo[@]}"; do echo "$i" ; done
$ for i in "string1" "string2" "string3"
> do
> array+=($i)
> done
$ echo ${array[@]}
string1 string2 string3
Bashの配列の最後に追加するためのかなりあいまいな構文は次のとおりです。
myarr[${#myarr[*]}]=”$newitem”
質問は答えられており、かなり古いですが、 ennukiller の答え(私の100k行のテストではそれが勝った14秒に対して12秒ですが、リスト追加ソリューションには数分かかります)。
次のトリックを使用できます。
# WORKS FASTER THAN THESE LAME LISTS! ! !
size=0;while IFS= read -r line; do
echo $line
((++size))
eval "SWAMP_$size='$line'"
done
または、次のことを実行できます。
#!/bin/bash
size=0
namespace="SWAMP"
ArrayAppend() {
namespace="$1"
# suppose array size is global
new_value="$2"
eval "${namespace}_$size='$2'"
eval "echo \$${namespace}_$size"
((++size))
}
ArrayAppend "$namespace" "$RANDOM"
ArrayAppend "$namespace" "$RANDOM"
ArrayAppend "$namespace" "$RANDOM"
ArrayAppend "$namespace" "$RANDOM"
ArrayAppend "$namespace" "$RANDOM"
インタプリタがタグリストにある限り、ここに オブジェクト指向bash のリンクがあります。