web-dev-qa-db-ja.com

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

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

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

これはetcbinvarを表示します(もちろん別の行に表示されます)。そして、私がdoの後にそのように追加すると:

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

必要なもの:etcbinvarsbin(もちろん別の行に)。

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

9
damekr

それはwill必要に応じて「sbin」を3回追加しますが、同じループで新しく追加された「sbin」を反復しません。

2番目の例の後:

echo "${array[@]}"
#=> etc bin var sbin sbin sbin
6
PSkocik
set etc bin var
while [ "$#" -gt 1 ]
do    [ "$1" = bin ] &&
      set "$@" sbin
      printf %s\\n "$1"
shift;done 

これはリストを反復処理し、条件付きでリストの末尾にsbinを付加し、反復可能なコンテンツにsbinを含めます。

5
mikeserv