Saya menggunakan bash shell di Linux. Saya memiliki skrip sederhana ini…
#!/bin/bash
TEMP=`sed -n '/'"Starting deployment of"'/,/'"Failed to start context"'/p' "/usr/java/jboss/standalone/log/server.log" | tac | awk '/'"Starting deployment of"'/ {print;exit} 1' | tac`
echo $TEMP
Namun saat saya menjalankan script ini
./temp.sh
semua output dicetak tanpa carriage return / baris baru. Tidak yakin apakah ini cara saya menyimpan output ke $ TEMP, atau perintah echo itu sendiri.
Bagaimana cara menyimpan output dari perintah ke variabel dan mempertahankan jeda baris / pengembalian carriage?
linux
bash
shell
line-breaks
Dave
sumber
sumber
don't
simpancommands
divariables
.Use
afunction
sebagai gantinyaJawaban:
Kutip variabel Anda. Inilah alasannya:
$ f="fafafda > adffd > adfadf > adfafd > afd"
$ echo $f fafafda adffd adfadf adfafd afd
$ echo "$f" fafafda adffd adfadf adfafd afd
Tanpa tanda kutip, shell mengganti
$TEMP
dengan karakter di dalamnya (salah satunya adalah baris baru). Kemudian, sebelum memanggilecho
shell membagi string itu menjadi beberapa argumen menggunakanInternal Field Separator
(IFS), dan meneruskan daftar argumen yang dihasilkan keecho
. Secara default,IFS
set disetel ke spasi (spasi, tab, dan baris baru), sehingga shell memotong$TEMP
string Anda menjadi argumen dan tidak pernah melihat baris baru, karena shell menganggapnya sebagai pemisah, seperti spasi.sumber
xdotool type "$myVar"
tidak bekerja. itu masih mengetik konten variabel tanpa baris baruFOO="$(echo $VAR)"
; bagaimana Anda mengutip$VAR
dengan benar jika sudah ada di dalam tanda kutip?"$(echo "$VAR")"
. Ya, itu aneh untuk diurai, tapi ternyata lebih mudah untuk shell daripada kita.Saya mengalami masalah yang sama, kutipan akan membantu
ubuntu@host:~/apps$ apps="abc > def" ubuntu@host:~/apps$ echo $apps abc def ubuntu@host:~/apps$ echo "$apps" abc def
sumber