BASH GNU bash, sürüm 4.2.25 (1) - sürüm (x86_64-pc-linux-gnu) Ubuntu 12.04LTS altında çalışılıyor
Bir dizinin içeriğini yeni satırlarla sınırlandırılmış bir dizgeye yazmakta sorun yaşıyorum.
Bu girişi buldum ( bir bash dizi değişkenini newlines ile sınırlandırılmış bir dizgeye nasıl dönüştürebilirim? ), Bu da çözümün elde edileceği konusunda büyük umutlar verdi. Bu komut satırında mükemmel çalışıyor.
$ System=('s1' 's2' 's3' 's4 4 4')
$ var=$( IFS=$'\n'; echo "${System[*]}" )
$ echo -e $var
s1
s2
s3
s4 4 4
Fakat onu bir kütüphane içindeki bir fonksiyona sözlü olarak dahil ettiğimde, tam olarak kendi dizimin yaptığı şeyi yapıyor ve yazdırıyor ...
s1 s2 s3 s4 4 4
Komut satırında od için boru, '\ n' sınırlayıcısının kullanımını onaylar
$ echo -e $var | od -ab
0000000 s 1 nl s 2 nl s 3 nl s 4 sp 4 sp 4 nl
163 061 012 163 062 012 163 063 012 163 064 040 064 040 064 012
s 1 \n s 2 \n s 3 \n s 4 4 4 \n
0000020
İşlev içinde aynı ifadeler, '\ s' sınırlayıcı olarak bir boşluk bırakın
0000000 s 1 sp s 2 sp s 3 sp s 4 sp 4 sp 4 nl
163 061 040 163 062 040 163 063 040 163 064 040 064 040 064 012
s 1 s 2 s 3 s 4 4 4 \n
0000020
Bu beni güdükledi. '\ N' sınırlayıcısının işlev içinde kullanımını nasıl zorlayabilirim?
Kullandığım, sunulan çözümü göstermek için SORU EKLENDİ. Komut satırında tırnaklar arasında fark yoktur (ki bu beni yanlış yönlendirir!); echo -e $ var veya echo -e "$ var" aşağıdaki gibi doğru çıktıyı verir.
s1
s2
s3
s4 4 4
Komut dosyasında, teklifler bir fark yaratır! Tırnak işaretleri olmadan sınırlayıcı alandır (sp / 040)
echo -e $var | od -abc
0000000 s 1 sp s 2 sp s 3 sp s 4 sp 4 sp 4 nl
163 061 040 163 062 040 163 063 040 163 064 040 064 040 064 012
s 1 s 2 s 3 s 4 4 4 \n
0000020
Betik içinde alıntılarla sınırlayıcı newline (nl, 012, \ n).
echo -e "$var" | od -abc
0000000 s 1 nl s 2 nl s 3 nl s 4 sp 4 sp 4 nl
163 061 012 163 062 012 163 063 012 163 064 040 064 040 064 012
s 1 \n s 2 \n s 3 \n s 4 4 4 \n
0000020
Bu öğrenme deneyimi için teşekkürler ve komut satırının ve komut dosyasının neden farklı davrandığına ilişkin basit bir açıklama var mı?