Echo newline Bash spaudoje tiesiogine prasme

Bash'e bandėte atlikti šiuos veiksmus:

 echo -e "hello\nworld" 

Tačiau ji nespausdina naujos eilutės, tik \n . Kaip galiu spausdinti naują eilutę?

Aš naudoju Ubuntu 11.04.

1695 m
12 дек. gruodžio 12 d. 2011-12-12 00:01 '11 prie 0:01 2011-12-12 00:01
@ 18 atsakymų

Vietoj printf galite naudoti

 printf "hello\nworld\n" 

printf turi nuoseklesnį elgesį nei echo . echo elgesys labai skiriasi skirtingose ​​versijose.

2077 m
12 дек. atsakymas pateikiamas 12 d. 2011-12-12 00:04 '11, 12:04 am 2011-12-12 00:04

Ar tikrai esate bash? Jis veikia man visais trimis būdais:

border=0
 echo -e "Hello\nworld" echo -e 'Hello\nworld' echo Hello$'\n'world 
1358
12 дек. Atsakymas pateikiamas choroba 12 d. 2011-12-12 00:04 '11, 12:04 am 2011-12-12 00:04
 echo $'hello\nworld' 

spausdina

ANSI C Citavimas : 

Žodžiai kaip $' string ' laikomi specialiai. Žodis plečiasi į eilutę , pakeitus backslashed pabėgus pagal ANSI C standartą.

443
02 нояб. atsakymas pateikiamas Vanuano lapkričio 02 d. 2012-11-02 12:39 '12 12:39 2012-11-02 12:39

Jūs visada galite daryti echo "" .

Pavyzdžiui.

 echo "Hello" echo "" echo "World" 
101
01 марта '14 в 1:14 2014-03-01 01:14 atsakymas pateikiamas Nayeem Zen kovo 1 d. 14 d. 1:14 2014-03-01 01:14

Atsitiktiniu atveju, kai kas nors sužino, kad nukentėjo į galvą prie sienos, bandydamas suprasti, kodėl scenarijaus darbuotojas nespausdins naujų linijų, atkreipkite dėmesį į tai →

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

Kaip ir aukščiau pateiktame pavyzdyje, faktinis paties metodo paleidimas gali būti suvyniotas į aidą, kuris pakeičia visus pačius metodus, kurie gali būti pačiame metode. Akivaizdu, kad artėjau trumpai, tai nebuvo taip lengva pastebėti!

Tada galite pasakyti savo draugams, kad geriausias būdas atlikti šias funkcijas bus toks:

 #!/bin/bash function GET_RECORDS() { echo -e "starting\n the process"; } GET_RECORDS; 
36
08 авг. atsakymą pateikė dėdė Iroh 08 rug . 2013-08-08 23:15 '13, 23:15, 2013-08-08 23:15

Norėdami išbandyti

 echo -e "hello\nworld" hello world 

dirbo man nano redaktoriuje.

24
05 дек. Atsakymas suteiktas Harsha B 05 Dec. 2017-12-05 14:06 '17 at 14:06 2017-12-05 14:06

Jis veikia man rapsų,

echo -e "hello\\nworld"

18
19 апр. atsakymą Sathesh pateikė 19 d 2014-04-19 22:05 '14, 10:05 val. 2014-04-19 22:05

POSIX 7 apie aidą

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

-e nėra apibrėžta, ir backslashes apibrėžia įgyvendinimo:

Jei pirmasis operandas yra -n, arba jei kuris nors operandas turi simbolį <backslash, rezultatai nustatomi pagal įgyvendinimą.

Jei neturite papildomo XSI plėtinio.

Todėl naudokite printf :

Formatavimo operatorius

turėtų būti naudojamas kaip formato eilutė, aprašyta XBD formato formato žymėjime [...]

Failo formato žymėjimas :

n <nauja linija> Perkelkite spausdinimo padėtį į kitos eilutės pradžią.

Taip pat turėkite omenyje, kad „Ubuntu 15.10“ ir dauguma „distros“ įrenginių echo taip:

  • a bash inline: help echo
  • savarankiškas vykdomasis failas: which echo

tai gali sukelti painiavą.

15
22 янв. Ciro Santilli atsakymas 改造 改造 中心 六四 法轮功 法轮功 Jan 22 2016-01-22 16:23 '16, 16:23 PM 2016-01-22 16:23
 str='hello\nworld' $ echo | sed "i$str" hello world 
15
23 нояб. Atsakyti alinsoar 23 nov. 2012-11-23 14:10 '12 12:10 pm 2012-11-23 14:10

Kitas įrašas yra skirtas tiems, kurie nepadėjo jokio šių sprendimų, ir turėtų gauti grąžinimo vertę iš savo funkcijos:

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

Tik šis triukas dirbo „Linux“, su kuriuo dirbau su šiuo „bash“:

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

Tikiuosi, kad tai padės kažkam panašios problemos.

4
31 янв. Atsakymas pateikiamas DNT sausio 31 d. 2014-01-31 17:20 '14, 17:20 2014-01-31 17:20

Mano scenarijus:

 echo "WARNINGS: $warningsFound WARNINGS FOUND:\n$warningStrings 

Išvada:

 WARNING : 2 WARNINGS FOUND:\nWarning, found the following local orphaned signature file: 

Mano „bash“ scenarijuje buvau piktas, kol bandžiau:

 echo "WARNING : $warningsFound WARNINGS FOUND: $warningStrings" 

Tiesiog paspauskite Enter, kur norite įdėti šį šuolį. Išvada:

 WARNING : 2 WARNINGS FOUND: Warning, found the following local orphaned signature file: 
3
14 мая '14 в 11:58 2014-05-14 11:58 atsakymą davė TanisDLJ gegužės 14 d. 14 val. 11:58 2014-05-14 11:58

Tai geriau daryti

 x="\n" echo -ne $x 
Galimybė

-e interpretuos backslahes pabėgimui
-n pašalina galutinę naują eilutę išvesties faile.

PS: echo komanda turi efektą, kuris visada apima paskutinę naują išvesties failo eilutę, todėl -n reikia norint išjungti šį dalyką (ir padaryti jį mažiau paini)

2
30 мая '17 в 10:00 2017-05-30 10:00 Atsakymą pateikė Dhwanit gegužės 30 d., 17 val

Taip pat galite naudoti aidus su garbanomis,

 $ (echo hello; echo world) hello world 
2
05 мая '14 в 12:32 2014-05-05 12:32 atsakymas duotas Avinash Raj 05 gegužės 14 d. 12:32 2014-05-05 12:32

Negalėjau gauti jokių pasiūlymų šiame atsakyme, nes, kaip paaiškėjo, bandžiau jį naudoti funkcijoje, kuri grąžina vertę, ir visi pranešime echo (ir printf) šioje funkcijoje buvo pridėta grąžinimo reikšmė po to, kai atskirai ištrinate naujas eilutes linijos.

Čia pateikiamas klausimas, susijęs su šiuo klausimu ir labai išsamus atsakymas:

Kaip ištaisyti „bash“ funkciją, kuri grąžina vertę, ir kaip pridėti naujų linijų simbolių kintamajam?

Tai buvo tarsi trijų valandų slapta kelionė.

1
03 дек. Atsakyti aliteralmind 03 Dec 2017-12-03 06:00 '17 at 6:00 2017-12-03 06:00

Taip pat galite:

 echo "hello world" 

Jis veikia mano MacOS.

1
31 авг. atsakymas pateikiamas vinzee 31 d. 2018-08-31 10:40 '18, 10:40 2018-08-31 10:40

Kartais galite perduoti kelias eilutes, atskirtas tarpu ir bus interpretuojamos kaip \n .

Pvz., Kai naudojate „shell“ scenarijų daugialypiams pranešimams:

 #!/bin/bash notify-send 'notification success' 'another line' 'time now ''date +"%s"' 
0
26 мая '18 в 10:14 2018-05-26 10:14 Hunterio Frazierio atsakymas gegužės 26 d. 18 d. 10:14 2018-05-26 10:14

Tai veikia man „CentOS“:

 echo -e ""hello\nworld"" 
0
17 авг. atsakymas vanishedzhou 17 rugpjūčio mėn 2018-08-17 06:56 '18 at 6:56 am 2018-08-17 06:56

Į bash 4.4 pridedamas naujas parametrų plėtinys, kuris interpretuoja evakuacijos sekas:

${parameter@operator} - E operator

Pratęsimas - tai eilutė, atspindinti parametro vertę su bėgančiu sluoksniu, pvz., Citatos mechanizmu $'…' .

 $ foo='hello\nworld' $ echo "${foo@E}" hello world 
0
23 июля '18 в 22:54 2018-07-23 22:54 Atsakymą pateikė PesaThe liepos 23 d., 18 val. 22:54 val. 2018-07-23 22:54

Kiti klausimai apie žymes arba Ask a Question