Boşluklar için 'for' döngüsünde tam satır nasıl okunur

93

Dosya için for döngüsü çalıştırmaya çalışıyorum ve tüm satırı görüntülemek istiyorum. Ama bunun yerine sadece son kelimeyi gösteriyor. Tam çizgiyi istiyorum.

for j in 'cat ./file_wget_med'

do
echo $j

done

çalıştırmadan sonra sonuç:

Found.

İşte verilerim:

$ cat file_wget_med
2013-09-11 14:27:03 ERROR 404: Not Found.
    
sordu user192118 11.09.2013 21:49

5 cevap

133

for döngüsü boşluk, sekme veya satır sonu gibi boşlukları gördüğünde ayrılır. Yani, IFS (İç Alan Ayırıcı) :

IFS=$'\n'       # make newlines the only separator
for j in $(cat ./file_wget_med)    
do
    echo "$j"
done
    
verilen cevap Radu Rădeanu 11.09.2013 22:26
67

for döngüsü varsayılan olarak herhangi bir boşlukta (boşluk, sekme, satırsonu) bölünür; Bir seferde bir satır üzerinde çalışmanın en kolay yolu, bunun yerine yeni satırlara ayrılan while read döngüsünü kullanmaktır:

while read i; do echo "$i"; done < ./file_wget_med

Ben senin emrini bir satır başına tükürmek için beklerim (eğer kendi başıma bir dosyayla test ettiğimde olan şey buydu). Başka bir şey oluyorsa, buna neden olabileceğinden emin değilim.

    
verilen cevap evilsoup 11.09.2013 22:04
16
#!/bin/bash
files='find <subdir> -name '*''
while read -r fname; do
    echo $fname
done <<< "$files"

Doğrulanmış bir çalışma, muhtemelen istediğiniz tek bir astar değil, ancak bunu yapmak çok kolay değil.

    
verilen cevap Mitchell Currie 02.11.2016 07:34
3

Burada Mitchell Currie'nin cevabının küçük bir uzantısı var, çünkü küçük bir yan etki yelpazesinden dolayı hoşlanıyorum, ki bu da bir değişken belirlemekten kaçınıyor:

#!/bin/bash
while read -r fname; do
    echo $fname
done <<< "'find <subdir> -name '*''"
    
verilen cevap Dandalf 07.06.2018 17:57
0

Bunu şöyle yazarım:

cat ./file_wget_med | while read -r j
do
    echo $j
done

orijinal komut dosyasında en az değişiklik gerektirdiğinden ( IFS kullanarak çözüm dışında, ancak bu döngü denetim ifadesi için bash davranışını değiştirir).

    
verilen cevap mik 27.08.2018 09:19

Etiketlerdeki diğer soruları oku