"xargs"を使用して配列に要素を追加できますか?

空の配列があります

arr=()

xargsこの配列に要素を追加するために使用できるものはありますか?

このように:

echo "test" | xargs arr+=()

ベストアンサー1

いいえ、それは不可能です。このxargsツールは、取得した入力量に応じて外部ユーティリティを1回以上実行します。配列の割り当ては外部ユーティリティの名前ではない可能性が高いため実行されません。また、xargsツール自体は外部ユーティリティなので、現在のシェル環境では何も変更できません。

これは簡単です。

arr+=( test )

または、コマンドから配列を読みたい場合(コマンド出力の1行に1つの要素):

readarray -t -O "${#arr[@]}" arr < <( some_command )

これにより、配列の末尾に新しい要素が追加され始め、arr出力の各行がsome_command新しい配列要素に読み込まれます。この-Oオプションは、データが挿入される配列のオフセットを決定し、配列の長さ"${#arr[@]}"だけ拡張されますarr。したがって、配列の現在の端からデータの挿入を開始しますarr。効果は配列に要素を追加することです。

前のコマンドをテストします。

$ arr=( 1 2 3 )
$ readarray -t -O "${#arr[@]}" arr < <( printf 'a\nb\nc\n' )
$ printf '%s\n' "${arr[@]}"
1
2
3
a
b
c

1この例では、要素が追加されていることを示すために、23つの要素を持つ配列で始まります。3配列は最初は空である可能性があります。

配列が次の場合みんな知ってる空または希望する場合 変える要素を配列に追加し、オプションなしでコマンドを使用します-O

readarray -t arr < <( some_command )

上記のコマンドは変えるarrコマンドの出力行から要素を取得した配列のすべての要素ですsome_command

help mapfileおよびbashマニュアルも参照してください(readarrayコマンドとmapfileコマンドは同じです)。

おすすめ記事