sed awk grep * vypis po medzeru - vypis od medzery

Vancl Miroslav (QRIS) miroslav.vancl na qris.cz
Neděle Říjen 8 21:58:34 CEST 2006


Jan Kuner napsal:

> 7. Cize "je zly" zsh. Vid B)

Nikoliv. Různé shelly se zřejmě liší způsobem provádění kolony (příkazy spojené pomocí "|" ).
V případě "... | (read A B; echo $A; echo $B)" jjsou naplnění proměnných A a B a výpis jejich obsahu pomocí "echo" provedeny týmž procesem shellu, takže na jeho typu nezáleží.
Ve druhém případě záleží na tom, jestli základní shell (interpretující zápis kolony a spouštějící potřebné podprocesy) provádí poslední člen kolony (read) sám, nebo zda k tomu spustí podproces (podshell). Pokud provede "read" sám hlavní shell, (jako zsh),  může pak vypsat i obsah příkazem read načtených proměnných. Pokud ale spustí "read" v podshellu (jako bash), proměnné A a B se v něm sice naplní ale jsou okamžitě zahozeny, protože podshell hned skončí a "echo" v hlavním shellu pak vypisuje něco jiného (nic).

> 8. Skuste mi vysvetlit, aky je rozdiel (v interpretacii) medzi
> read A B; echo $A; echo $B
> (read A B; echo $A; echo $B)
> (read A B); echo $A; echo $B

První a druhá varianta dají na výstupu shodný výsledek, druhá ale po skončení zahodí načtené a vypsané obsahy proměnných A a B (běží v podshellu). Třetí varianta je zahodí ještě před výpisem, takže je nevypíše. Výsledky těchto tří zápisů nebudou na variantě shellu záviset (nejednoznačný je jen způsob provádění kolony)

M. Vancl


Další informace o konferenci Linux