Bir dizi üzerindeki bir döngüde, diziye bir öğe ekleyin


9

Bash döngü için bir sorun var. Örneğin: Bir dizim var ("etc" "bin" "var"). Ve bu dizide tekrar ediyorum. Ama döngüde diziye bir miktar değer eklemek istiyorum. Örneğin

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

Bu görüntülenir etc bin var(elbette ayrı satırlarda). Ve sonra doböyle eklerseniz :

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

İstiyorum: etc bin var sbin(tabii ki ayrı satırlarda).

Bu çalışmıyor. Nasıl yapabilirim?


1
Tekrarladığınız şeyi değiştirmek her zaman riskli bir tekliftir. Geri adım atmak ve mantıklı olabilecek başka bir yaklaşım olup olmadığını düşünmek için genellikle iyi bir zamandır
Eric Renouf

Yanıtlar:


6

Bu olacak olması gerektiği gibi 3 kez "Sbin" ekleyin, ancak yeni eklenen "Sbin" Aynı döngü içinde s üzerinde o yinelerler olmaz.

2. örnekten sonra:

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

Evet, doğru, ama aynı döngüye
eklemem

forSonra iki döngü kullanın . Önce eklemelerinizi yapın, ardından sonucun üzerine gelin.
PSkocik

1
Gerçi sbin'i neden döngüye eklemek istediğinizi anlamıyorum. Sadece bir kez array+=(sbin); for i in ...
eklemek

döngü için
becouse Ben

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

Bu, listeniz üzerinde yinelenir sbin, söz konusu listenin sonuna koşullu sbinolarak yapışır ve yinelenebilir içeriğe dahil edilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.