Bagaimana cara mempertahankan jeda baris saat menyimpan output perintah ke variabel?

106

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?

Dave
sumber
3
Mereka dipertahankan dalam variabel dengan baik (kecuali yang terakhir); gema Anda yang rusak. Lihat entri mywiki.wooledge.org/BashPitfalls # 14
Charles Duffy
1
juga, don'tsimpan commandsdi variables. Usea functionsebagai gantinya
han solo

Jawaban:

207

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 $TEMPdengan karakter di dalamnya (salah satunya adalah baris baru). Kemudian, sebelum memanggil echoshell membagi string itu menjadi beberapa argumen menggunakan Internal Field Separator(IFS), dan meneruskan daftar argumen yang dihasilkan ke echo. Secara default, IFSset disetel ke spasi (spasi, tab, dan baris baru), sehingga shell memotong $TEMPstring Anda menjadi argumen dan tidak pernah melihat baris baru, karena shell menganggapnya sebagai pemisah, seperti spasi.

jaypal singh
sumber
xdotool type "$myVar"tidak bekerja. itu masih mengetik konten variabel tanpa baris baru
azerafati
Bagaimana jika Anda ingin melakukan sesuatu seperti FOO="$(echo $VAR)"; bagaimana Anda mengutip $VARdengan benar jika sudah ada di dalam tanda kutip?
weberc2
@ weberc2 Anda hanya mengutip lagi: "$(echo "$VAR")". Ya, itu aneh untuk diurai, tapi ternyata lebih mudah untuk shell daripada kita.
OJFord
3

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
Bob
sumber
2
Menjawab pertanyaan hampir 5 tahun kemudian tanpa menambahkan detail baru pada jawaban sebelumnya atau memberikan solusi baru bukanlah ide yang baik; harap hindari memposting jawaban semacam ini.
MAChitgarha
1
Mencintai ketepatan "hampir 5 tahun" Anda, @MAChitgarha, :)
Neil Gatenby