Yanıtlar:
Şunun yerine kullanmalısınızprintfecho :
printf "%s\n" "${mtches[@]}"
Boşsa mtches, yine de bir boş satır çıkacaktır. Bunu hesaba katmak için:
{ [ "${#mtches[@]}" -eq 0 ] || printf '%s\n' "${mtches[@]}"; } > file
In bash(ve aynı zamanda POSIX kabukları), sık kullandığınız Konumsal parametreler dizisi olarak "$@"yerine "$*"özel bir nedeniniz yoksa,. İnsan bashından düzenli dizileri destekleyen kabuklarda da bu geçerlidir - bölüm Diziler :
Bir dizinin herhangi bir öğesine $ {name [Subscript]} kullanılarak başvurulabilir. Kabukların dosya adı genişletme işleçleriyle çakışmaları önlemek için parantezler gereklidir. Alt simge '@' veya '*' ise, kelime dizi adının tüm üyelerine genişler. Bu abonelikler yalnızca kelime çift tırnak içinde göründüğünde farklılık gösterir. Sözcük çift tırnak içine alınmışsa, $ {name [*]} her dizi üyesinin değeri IFS değişkeninin ilk karakteri ile ayrılmış tek bir kelimeye genişler ve $ {name [@]} adın her bir öğesini genişletir ayrı bir kelimeye. Dizi üyesi olmadığında, $ {name [@]} hiçbir şeye genişlemez. Çift tırnaklı genişleme bir sözcük içinde gerçekleşirse, ilk parametrenin genişlemesi orijinal sözcüğün başlangıç kısmı ile birleştirilir ve son parametrenin genişlemesi orijinal sözcüğün son kısmı ile birleştirilir.
Yalnızca "${array[*]}"tüm dizi öğelerini bir dizeye birleştirmek istediğinizde kullanın .
Bunun ${mtches[*]}yerine kullanmak istiyorsunuz .
Kullandığınızda "${mtches[@]}", değerinin ne olduğu önemli değildir $IFS, bash diziyi birden çok bağımsız değişkene böler. İstediğiniz her bir dizi öğesinin katıldığı tek bir argüman \n. ${mtches[*]}bunu başarır.
Ayrıca geçici bir ayar yöntemi olarak $IFSşunları yapabilirsiniz:
( IFS=$'\n'; echo "${mtches[*]}" > sample1.txt )
O zaman geri koymakla uğraşmak zorunda kalmazsınız.
printf...
Kullanımı için :
for each in "${alpha[@]}"
do
echo "$each"
done
Kullanımı tarihini ; değerleriniz şunları içeriyorsa bunun başarısız olacağını unutmayın !:
history -p "${alpha[@]}"
Basename kullanma ; değerleriniz şunları içeriyorsa bunun başarısız olacağını unutmayın /:
basename -a "${alpha[@]}"
Shuf kullanma ; sonuçların sırayla çıkmayabileceğini unutmayın:
shuf -e "${alpha[@]}"
for ENTRY in ${ARRAY[@]}; do
echo $ENTRY
done > outfile
Güzel ve okunabilir ve IFS ile uğraşmak anlamına gelmez. Ayrıca, her hattın işlenmesini özelleştirebileceğiniz anlamına gelir.
echoiçerik için kullanılamayan ve değişkenlerinizi alıntılamayı unuttuğunuz kullandığınız için yanlış . StevenPenny