Portál AbcLinuxu, 16. května 2025 01:06
Řešení dotazu:
printf %200s ''Teď je ale začátek semestru. Co všichni blbnete s těmi domácími úlohami?
help printf
, zjistit si, co ten příkaz příkaz dělá a určitě si to tazatel zvládne spravit.
takhle rikas aby 200x vytiskl prazdny stringTohle - stejně jako v kterémkoliv jazyce s rozumnou podporou
printf
- znamená, vytiskni následující parametr jako řetězec a zarovnej ho na 200 znaků. A zarovnává se mezerami.
prazdny string, coz tedy shodou okolnosti je take mezeraNení.
pretože ak si dobre spomínam, tak napr. Bash niečo také ignoruje
Neignoruje. Je podstatný rozdíl mezi tím, jestli příkazu nepředáte žádný parametr nebo jestli mu jako parametr předáte prázdný řetězec. Zkuste si třeba
ls -l ls -l ''
To, že to u příkazu printf
funguje, je možné jen díky
If the format requires more arguments than are supplied, the extra format specifications behave as if a zero value or null string, as appropriate, had been supplied.
Ale stejně doporučuji si na takové triky nezvykat. Kdybyste totéž zkusil s knihovní funkcí printf()
, nedopadne to dobře.
printf %200s ''proč tohle nevypíše 200x x?
printf %200s 'x'Dík
printf
. Nejlépe oboje.
Protože podle specifikace to nemá vypsat dvěstěkrát x, ale 199 mezer a jedno x. Což je přesně to, co to dělá.Díky za objasnění, aha poradíte jak vypišu 200x "x" ?
printf %s xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa časem se možná dozvíme, co potřebuješ doopravdy...
Ale je, jen to není odpověď na to, co jste se chtěl vědět, ale na to, na co jste se zeptal. Což je ostatně dobrý trénink pro programování, protože počítače také nedělají to, co po nich chcete, ale to, o co si jim řeknete. :-)
Upřímně řečeno, pokud se na takovou věc potřebujete ptát a nedokážete napsat cyklus, který dvěstěkrát vypíše "x", měl byste se vážně zamyslet nad tím, jestli se opravdu chcete věnovat programování.
REP=200 for (( i=0; i<$REP; i++ )) do echo " " donekdyž výsledek bude stejný
printf %200s ''
Nechápu ale to proč mám psát...Není asi třeba speciálně zdůrazňovat, že nechápeš, vyplývá to z průběhu diskuse. A vlastně nečekám, že to pochopíš tentokrát, ale zkusme to... Chápeš, že každé to řešení, které jsi tu teď uvedl (první s chybou, tedy bez -n u echo), dělá něco úplně jiného? Chápeš, že jedno využívá cyklus, takže dvěstěkrát něco provede a lze ho snadno změnit na cyklus, který dvěstěkrát udělá něco jiného? Chápeš, že druhé využívá určitou speciální vlastnost printf, tedy doplnění výsledku mezerami (ničím jiným) na uvdedenou délku? Chápeš, že příkaz
printf ' 'přesně vyhovuje tvému zadání vypsat 200 mezer pomocí printf? Chápeš, že když nesplňuje nějakou jinou důležitou podmínku, tak je nutné ji napsat? Chápeš, že ‚udělat foo pomocí printf‘ lze milionem způsobů? Chápeš, že nikdo neví, o co ti jde, protože jsi to zatím nenapsal?
jelikož to chci napsat jen pomocí printf a bez cyklu while until či for
Chttít můžete. To, že něco chcete, neznamená, že všichni na povel začneme vymýšlet nějaké absurdity jako je ta, kterou napsal o něco níže Jirka…
printf 'x%.0s' {1..200}
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.