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
(もちろん別の行に)。
これは機能していません。どうすればできますか?
それはwill必要に応じて「sbin」を3回追加しますが、同じループで新しく追加された「sbin」を反復しません。
2番目の例の後:
echo "${array[@]}"
#=> etc bin var sbin sbin sbin
set etc bin var
while [ "$#" -gt 1 ]
do [ "$1" = bin ] &&
set "$@" sbin
printf %s\\n "$1"
shift;done
これはリストを反復処理し、条件付きでリストの末尾にsbin
を付加し、反復可能なコンテンツにsbin
を含めます。