Portál AbcLinuxu, 26. dubna 2024 03:10


Dotaz: Oprava zápisu printf

23.9.2021 03:01 Kuba
Oprava zápisu printf
Přečteno: 308×
Odpovědět | Admin
Ahoj, prosím proč tento zápis funguje
printf "\e[1;34mThis is a blue text.\e[0m"
a tento ne?
a="\e[1;34m"
b="This is a blue text."
c="\e[0m"

printf '%s%s%s' "$a" "$b" "$c"
Děkuju
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

23.9.2021 09:46 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Oprava zápisu printf
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pretože je rozdiel medzi %s a %b. Za domácu úlohu si si mal pozrieť manuálovú stránku príkazu printf.
23.9.2021 10:14 rastos | skóre: 62 | blog: rastos
Rozbalit Rozbalit vše Re: Oprava zápisu printf
On tam niekde má, alebo mal použiť "%b"?

Ja by som skôr povedal, že printf interpretuje backslash vo svojom prvom argumente (FORMAT) ale neinterpretuje ho vo výsledku nahradenia "%s" za ďalší commadnline argument.
23.9.2021 11:00 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Oprava zápisu printf
To je veľmi pekná otázka, a jej odpoveď sa skrýva na troch miestach:
  1. Manuálová stránka príkazu (1) printf
  2. Pokus so zamenením %s za %b
  3. Duplikátna téma: Dotaz: Oprava zápisu printf v BASH
23.9.2021 11:35 _
Rozbalit Rozbalit vše Re: Oprava zápisu printf
Rule 1 of being an human: nebuď píča.
23.9.2021 11:58 Peter Golis | skóre: 64 | blog: Bežné záležitosti | Bratislava
Rozbalit Rozbalit vše Re: Oprava zápisu printf
Tak ťa teda nezobudím.
Josef Kufner avatar 23.9.2021 20:41 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Oprava zápisu printf
Odpovědět | | Sbalit | Link | Blokovat | Admin
Protože "\e" v Bashi je prostě lomítko, 'e' a nikoliv escape.

Printf ve formátovacím (prvním) parametru lomítko interpretuje, ale do %s už dosazuje neinterpretovaný řetězec tak, jak přišel.

Můžeš však zapsat ten escape už v Bashi:
a=$'\e[1;34m'
b="This is a blue text."
c=$'\e[0m'

printf '%s%s%s' "$a" "$b" "$c"
Hello world ! Segmentation fault (core dumped)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.