Jak wydrukować nowy znak linii za pomocą echa?

15

I zrzucić łańcuch ze hexdumptak 2031 3334 2e30 0a32 2032 3331 302e 000a. Oczywiste jest, że 0x0ajest to nowy znak linii, jednak gdy próbuję powtórzyć ten ciąg znaków, zawsze mam 1 430.2 2 13.0- nowa linia jest zastępowana spacją, nawet używam -eflagi.

Co może być problemem? Czy tailing \0rujnuje produkcję? Czy są jakieś alternatywy do wydrukowania 0x0anowej linii?

Dziękuję i pozdrawiam.

Summer_More_More_Tea
źródło
kiedy próbuję powtórzyć ten ciąg Jak dokładnie to robisz? Jakiego dokładnie polecenia używasz?
Dennis
@Dennis Mam na myśli echo -e. Dzięki, znajduję rozwiązanie.
Summer_More_More_Tea
1
preferowanym rozwiązaniem jest użycie printf "...\n"zamiast echo.
Michael
stackoverflow.com/questions/8467424/...
Ciro Santilli 23 改造 中心 法轮功 六四 事件 事件

Odpowiedzi:

26

Znak nowego wiersza echopolecenia to „\ n”. Biorąc następujący przykład:

echo -e "This is line 1\nThis is line 2"

Spowodowałoby to wynik

This is line 1
This is line 2

Ważny jest tutaj parametr „-e” .

Izzy
źródło
3
btw, to "echo -e ..."zależy od echa bash do poprawnego działania (np. dashpo prostu wypisuje „-e”); ale „/ bin / echo” może (ale nie musi) również działać. Niestety (być może odpowiednio), wokół jest wiele echa i naprawdę nie chcesz się przejmować tym, który dostaniesz. Korzystanie 'printf "....\n"jest bardziej przenośną opcją dla środowisk env i powłok.
Michael
@ Michael_n, co zresztą zresztą zresztą OP zrezygnował . Ale pytanie wyraźnie brzmiało „echo” - stąd moja odpowiedź w ten sposób. W każdym razie nie było to „z Bash” - więc dziękuję za zwrócenie uwagi na te różnice!
Izzy
5

POSIX 7 mówi, że nie możesz

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

-e nie jest zdefiniowany, a ukośniki odwrotne są zdefiniowane jako implementacja:

Jeśli pierwszym operandem jest -n lub jeśli którykolwiek z operandów zawiera znak <backlash>, wyniki są zdefiniowane w implementacji.

chyba że masz opcjonalne rozszerzenie XSI.

printfZamiast tego użyj :

operand formatu należy wykorzystać jako ciąg formatu opisany w notacji formatu pliku XBD [...]

Oznaczenia Format pliku :

\ n <nowa linia> Przenieś pozycję drukowania na początek następnego wiersza.

Pamiętaj również, że Ubuntu 15.10 i większość dystrybucji implementuje echooba jako:

  • wbudowane Bash: help echo
  • samodzielny plik wykonywalny: which echo

co może prowadzić do zamieszania.

Ciro Santilli
źródło
2

Wreszcie poprawnie formatuję ten ciąg printf "$string". Dziękuję wam wszystkim.

Summer_More_More_Tea
źródło
O $stringczym ty mówisz? Jak to się wiąże z pytaniem? Czego to nie dotyczy, \njak w dwóch pozostałych odpowiedziach?
Peter Mortensen