配列のループで、配列に要素を追加します


9

bashのforループに問題があります。例:配列があり("etc" "bin" "var")ます。そして、私はこの配列について繰り返します。しかし、ループでは、配列に値を追加したいと思います。例えば

array=("etc" "bin" "var")
for i in "${array[@]}"
do
echo $i
done

これは表示されますetc bin var(もちろん、別々の行に表示されます)。そして、私doがそのように追加した場合:

array=("etc" "bin" "var")
for i in "${array[@]}"
do
array+=("sbin")
echo $i
done

私は欲しい:(etc bin var sbinもちろん別々の行に)。

これは機能していません。どうすればできますか?


1
反復しているものを変更することは、常に危険な命題です。多くの場合、一歩
下がって

回答:


6

それはなります「sbinに」3回、それは必要がありますが、それは同じループで新しく追加された「sbinに」Sを反復処理しませんように追加します。

2番目の例の後:

echo "${array[@]}"
#=> etc bin var sbin sbin sbin

はい、そうですが、同じループに追加する必要があります:)
damekr

for次に、2つのループを使用します。最初に追加を実行し、次に結果をループします。
PSkocik 2015年

1
ループにsbinを追加する理由がわかりません。一度だけ親切になり、より意味のことを追記:array+=(sbin); for i in ...
PSkocik

...ループのために、このことにより、コピーされたいくつかのファイルは、いくつかのコンテンツがある場合はループの中で、私がチェックする必要がありますbecouse
damekr

5
set etc bin var
while [ "$#" -gt 1 ]
do    [ "$1" = bin ] &&
      set "$@" sbin
      printf %s\\n "$1"
shift;done 

それはあなたのリストを反復し、sbin条件付きでリストの最後にsbin付け加え、反復可能なコンテンツに含めます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.