Pertanyaan Echo newline di Bash mencetak literal \ n


Di Bash, coba ini:

echo -e "hello\nworld"

Tapi itu tidak mencetak garis baru saja \n. Bagaimana saya bisa membuatnya mencetak baris baru?

Saya menggunakan Ubuntu 11.04.


1567
2017-12-11 21:01


asal


Jawaban:


Anda bisa menggunakannya printf sebagai gantinya:

printf "hello\nworld\n"

printf memiliki perilaku yang lebih konsisten daripada echo. Perilaku echo sangat bervariasi antara versi yang berbeda.


1934
2017-12-11 21:04



Apakah Anda yakin Anda berada di bash? Bekerja untuk saya, ketiga cara:

echo -e "Hello\nworld"
echo -e 'Hello\nworld'
echo Hello$'\n'world

1296
2017-12-11 21:04



echo $'hello\nworld'

cetakan

hello
world

$'' menggunakan string ANSI C Mengutip:

Kata-kata formulir $'tali' diperlakukan khusus. Kata itu meluas ke tali, dengan karakter backslash-escape diganti sebagaimana ditentukan oleh standar ANSI C.


422
2017-11-02 09:39



Anda selalu bisa melakukannya echo "".

misalnya

echo "Hello"
echo ""
echo "World"

90
2018-02-28 22:14



Jika seseorang menemukan dirinya memukul kepala mereka ke dinding mencoba untuk mencari tahu mengapa skrip rekan kerja tidak akan mencetak baris baru, lihatlah ini ->

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

echo $(GET_RECORDS);

Seperti di atas, jalannya metode itu sendiri mungkin dibungkus dalam gema yang menggantikan setiap gema yang mungkin dalam metode itu sendiri. Jelas saya menyirami ini turun untuk singkatnya, itu tidak begitu mudah dikenali!

Anda kemudian dapat memberi tahu rekan Anda bahwa cara yang lebih baik untuk menjalankan fungsi akan seperti ini:

#!/bin/bash
function GET_RECORDS()
{
   echo -e "starting\n the process";
}

GET_RECORDS;

32
2017-08-08 20:15



Mencoba

echo -e "hello\nworld"
hello
world

bekerja untuk saya di editor nano.


20
2017-12-05 11:06



Ini bekerja untuk saya dalam raspbian,

echo -e "hello\\nworld"


17
2018-04-19 19:05



str='hello\nworld'
$ echo | sed "i$str"
hello
world

14
2017-11-23 11:10



POSIX 7 pada echo

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e tidak didefinisikan dan backslash adalah implementasi yang didefinisikan:

Jika operan pertama adalah -n, atau jika salah satu operan berisi karakter <backslash>, hasilnya ditentukan oleh implementasi.

kecuali Anda memiliki ekstensi XSI opsional.

Jadi gunakan printf sebagai gantinya:

format operand harus digunakan sebagai string format yang dijelaskan dalam Notasi Format File XBD [...]

itu Notasi Format File:

\ n <baris baru> Pindahkan posisi pencetakan ke awal baris berikutnya.

Juga perlu diingat bahwa Ubuntu 15.10 dan sebagian besar implementasi distro echo keduanya sebagai:

  • Bash built-in: help echo
  • Eksekusi mandiri: which echo

yang dapat menyebabkan kebingungan.


14
2018-01-22 13:23



Satu lagi entri di sini bagi mereka yang tidak membuatnya bekerja dengan solusi ini, dan perlu mendapatkan nilai kembali dari fungsinya:

function foo()
{
    local v="Dimi";
    local s="";
    .....
    s+="Some message here $v $1\n"
    .....
    echo $s
}

r=$(foo "my message");
echo -e $r;

Hanya trik ini bekerja di linux yang saya kerjakan dengan bash ini:

GNU bash, version 2.2.25(1)-release (x86_64-redhat-linux-gnu)

Semoga ini membantu seseorang dengan masalah yang sama.


4
2018-01-31 14:20