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?


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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.