Dalam loop di atas array, tambahkan elemen ke array

9

Saya punya masalah dengan for loop in bash. Sebagai contoh: Saya punya array ("etc" "bin" "var"). Dan saya beralih pada array ini. Tetapi dalam loop saya ingin menambahkan beberapa nilai ke array. Misalnya

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

Ini menampilkan etc bin var(tentu saja pada baris terpisah). Dan jika saya tambahkan setelah doseperti itu:

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

Saya ingin: etc bin var sbin(tentu saja pada baris terpisah).

Ini tidak bekerja. Bagaimana saya bisa melakukannya?

damekr
sumber
1
Mengubah hal yang Anda ulangi selalu merupakan proposisi yang berisiko. Sering kali ini saat yang tepat untuk mundur dan mempertimbangkan apakah ada pendekatan lain yang masuk akal
Eric Renouf

Jawaban:

6

Ini akan menambahkan "sbin" 3 kali sebagaimana mestinya, tetapi itu tidak akan berulang di atas "sbin" yang baru ditambahkan di loop yang sama.

Setelah contoh ke-2:

echo "${array[@]}"
#=> etc bin var sbin sbin sbin
PSkocik
sumber
Ya, itu benar, tapi saya perlu menambahkan ke loop yang sama :)
damekr
Gunakan dua forloop kemudian. Pertama, tambahkan penambahan Anda, kemudian lingkarkan hasilnya.
PSkocik
1
Saya tidak melihat mengapa Anda ingin menambahkan sbin di loop. Menambahkannya sekali saja lebih masuk akal:array+=(sbin); for i in ...
PSkocik
Karena untuk loop saya harus memeriksa apakah beberapa file yang menyalin oleh ini untuk loop memiliki beberapa konten ..
damekr
5
set etc bin var
while [ "$#" -gt 1 ]
do    [ "$1" = bin ] &&
      set "$@" sbin
      printf %s\\n "$1"
shift;done 

Itu akan beralih di atas daftar Anda, sbintempelkan ke akhir daftar tersebut secara kondisional, dan sertakan sbindalam konten yang dapat diubah.

mikeserv
sumber