Jako začátečník, když začínáte pracovat se skripty Bash, prvním příkazem, který se pravděpodobně naučíte a budete jej používat, je echo
příkaz. Můžete si představit příkaz bash echo něco podobného jako print
příkazy v jiných programovacích jazycích. echo
příkaz je vestavěný bash a jeho účelem je vytisknout výstup na stdout (tj. terminál).
V tomto článku vám ukážu, co je příkaz bash echo a jak jej používat ve skriptech shellu. Než se pustíme do tématu, podívejme se na rozdíl mezi Bash vestavěným a externím příkazem.
Vestavěný příkaz Bash echo vs externí příkaz echo
V Linuxu a dalších unixových systémech jsou některé příkazy poskytovány jako vestavěné i externí příkazy. Například /bin/echo
je externí příkaz, který má stejný název jako echo
vestavěný bash.
Když zavoláme příkaz, který existuje jako vestavěný i jako externí příkaz, obvykle se vestavěný příkaz provede ve výchozím nastavení. Protože pořadí priorit pro názvy příkazů je alias
a poté function
a poté builtin
a poté externí příkaz v adresářích uvedených v $PATH
v pořádku.
Pokud chcete vynutit externí příkaz, který je k dispozici jako vestavěný i externí příkaz, jednoduše použijte jeho úplnou cestu.
Abychom to vysvětlili jasně, následující příkaz volá vestavěný bash:
$ echo <some-text>
A následující volání externí echo
příkaz:
$ /bin/echo <some-text>
Chcete-li zjistit, zda je příkaz vestavěný nebo externí příkaz, můžeme použít type příkaz:
$ type echo echo is a shell builtin
Chcete-li zobrazit všechna umístění obsahující zadaný spustitelný soubor, použijte -a
příznak:
$ type -a echo echo is a shell builtin echo is /usr/bin/echo
Další podrobnosti o type
použití příkazu naleznete na následujícím odkazu:
- Výukový program příkazu typu s příklady pro začátečníky
V této příručce budeme diskutovat o vestavěném bash echo
příkaz, nikoli externí.
Zobrazit nápovědu k příkazu bash echo
Téměř všechny linuxové příkazy tam mají buď manuálovou stránku, nebo sekci nápovědy, kde se dozvíte, jak tento příkaz používat. Příručka nápovědy echo
Příkaz je součástí manuálové stránky Bash
Pro přístup k manuálové stránce pro bash
příkaz, spusťte:
$ man bash
Nyní zadejte /echo
a stiskněte n
dokud neuvidíte sekci nápovědy echo
příkaz.
Případně můžete použít následující jednořádkový příkaz k zobrazení sekce nápovědy echo
příkaz:
$ man bash | less --pattern='^ *echo +\['
Struktura příkazu echo
echo
příkaz přijímá tři volitelné argumenty a text, který má být vytištěn na stdout.
echo [-neE] [arg ...] -n → Do not append a new line -e → enable interpretation of backslash escapes -E → disable the interpretation of backslash escapes (default)
Nyní přeskočme tři volitelné argumenty a podívejme se, jak používat echo
pro tisk textu na stdout (Terminál).
Můžete buď spustit následující část kódu přímo v terminálu, nebo vytvořit soubor skriptu a poté jej spustit. Spustím to přímo v Terminálu:
$ echo "Hello World" Hello World
Podívejte se na výše uvedený příklad. Je to tradiční hello world
program, který spustíme vždy, když se naučíme jakýkoli nový jazyk, a spustíme jej jako první kód. echo
příkaz zde přijímá "hello world"
text jako argument a vytiskne jej na terminál (Stdout).
Jak potlačit znak nového řádku
Výchozí chování bash echo
je, automaticky přidá nový řádek (\n
). Spusťte stejný hello world
program znovu a všimněte si, že výzva terminálu se zobrazí na novém řádku.
$ echo "Hello World" Hello World
Nyní, pokud chcete toto chování potlačit, můžete použít "-n"
příznak, který potlačí nový řádek a výzva terminálu bude vytištěna na stejném řádku, jak je uvedeno níže.
$ echo -n "Hello world" Hello world
Co se stane, když není předán žádný argument
Když příkazu echo není předán žádný argument, příkaz se nezdaří, ale vrátí prázdný nový řádek. Spusťte svůj terminál a spusťte "echo"
a uvidíte, že vytiskne prázdný řádek a skončí.
$ echo
$ echo $?
0
Toto chování můžete přepsat přidáním "-n"
příznak, který nevytiskne nový řádek, i když nebude předán žádný argument.
$ echo -n
Kde to bude užitečné? Možná se divíte. Pokud chcete mezi výstupy nějaké prázdné řádky, můžete použít echo
bez argumentů.
Práce s proměnnými a příkazy
echo
příkaz bude interpretovat uživatelem definované proměnné nebo proměnné prostředí, které jsou předány jako argument, a vypíše hodnotu. Podívejte se na níže uvedené příklady.
Nejprve proměnná env "SHELL"
je předán echo
a vypíše hodnotu proměnné.
# Environmental Variable: $ echo " I am currently using ${SHELL}" I am currently using /bin/bash
Za druhé, uživatelem definovaná proměnná "NAME"
je předán echo
a hodnota se vytiskne na terminál.
# User Defined Variable: $ NAME="PoP_OS" $ echo "I am using ${NAME}" I am using PoP_OS
Můžete také spouštět příkazy uvnitř argumentů. Podívejte se na níže uvedený příklad, kde je "uname -r"
příkaz je předán jako argument a příkaz je interpretován a výstup je vytištěn.
$ echo "KERNEL_VERSION=$(uname -r)" KERNEL_VERSION=5.11.0-7620-generic
Dopad používání jednoduchých a dvojitých uvozovek
Ve všech předchozích příkladech jste si mohli všimnout, že kolem argumentů používám dvojité uvozovky. Co se tedy stane, když argument není uzavřen v uvozovkách? Příkaz Echo se nezdaří a získáte stejný výstup.
Podívejte se na následující příklad. Spouštím stejný příkaz, který jsem použil v předchozí části, ale bez uvozovek a vytiskne výstup bez jakékoli chyby.
$ echo I am using ${NAME} I am using Pop_OS
Doporučuje se vždy argumenty uzavřít do uvozovek.
Pokud je argumentem prostý text, můžete použít jednoduché nebo dvojité uvozovky. Ale pokud chcete spustit jakýkoli příkaz nebo rozšířit jakoukoli proměnnou v argumentu, měli byste použít dvojité uvozovky, nikoli jednoduché uvozovky.
Jednoduchá uvozovka zabrání spuštění jakéhokoli příkazu nebo rozšíření proměnné. Prostě bude celý argument považovat za prostý text.
Podívejte se na níže uvedený příklad. Když argument uzavřem do jednoduchých uvozovek, proměnná "NAME"
není interpretován a považován za text.
# SINGLE QUOTES $ echo 'I am using ${NAME}' I am using ${NAME} # DOUBLE QUOTES $ echo "I am using Linux ${NAME}" I am using Linux PoP_OS
Přesměrování a potrubí výstupu
Jak bylo uvedeno dříve, echo
příkaz standardně tiskne výstup na standardní výstup (terminál). Když píšete skripty shellu, můžete se dostat do situace, kdy budete ukládat výstup echo
příkaz do souboru. Můžete to udělat pomocí přesměrování bash operátor.
$ echo "Welcome to OSTechNix" > /tmp/op.log
$ cat /tmp/op.log Welcome to OSTechNix
Doporučené čtení:
- Přesměrování Bash vysvětleno na příkladech
- Výukový program Bash Heredoc pro začátečníky
Můžete také odeslat výstup echo
příkaz do pipe
k dalšímu zpracování.
$ echo "I am using ${NAME}" I am using PoP_OS
$ echo "I am using ${NAME}" | grep -i -o POP PoP
Víceřádkový řetězec
Váš argument se někdy může objevit na více než jednom řádku. Víceřádkový argument můžete uzavřít dvojitými uvozovkami, aby se výstup vytiskl s ohledem na nové řádky, tabulátory a mezery.
$ echo "This is Line 1
This is Line 2
This is Line 3"
V některých případech, i když je váš argument předán jako víceřádkový řetězec, můžete jej vytisknout jako jeden řádek. V takových případech použijte "\"
symbol na konci každého řádku, takže další řádek bude navazovat na předchozí řádek.
$ echo "I am running \ the echo command \ again"
Ukázkový výstup:
I am running the echo command again
Toto není výlučně specifické pro bash echo
příkaz. Tento přístup můžete použít k vytváření velmi velkých příkazů na víceřádkové pro lepší čitelnost.
Zpětné lomítko unikne interpretaci
echo
příkaz přijímá jako argumenty mnoho uvozených znaků. Aby byly tyto speciální znaky rozpoznány příkazem echo, "-e"
vlajka by měla být předána. Seznam podporovaných speciálních znaků můžete získat z echo
manuálová stránka příkazu.
Ve svém každodenním životě nebudete používat všechny speciální znaky. Většinou budete používat znaky nového řádku, tabulátory a zpětné lomítko.
Znak nového řádku – \n
Po předání \n
bude přidán nový řádek na echo
příkaz. Můžete také předat více \n, čímž se odpovídajícím způsobem přidají další řádky.
$ echo -e "This is the first line\nThis is the second Line\nThis is the third line"
Ukázkový výstup:
This is the first line This is the second Line This is the third line
Záložka Horizontální – \t
Když \t
je použit, přidá mezery tabulátoru. Můžete také kombinovat několik únikových znaků, jako jsem to udělal níže.
$ echo -e "Enter the U_NAME\t:\n" Enter the U_NAME :
Svislá karta – \v
Chcete-li vytvořit karty svisle, použijte \v
.
$ echo -e "Enter the username\vEnter the password" Enter the username Enter the password
Potlačit výstup - \c
Když \c
se používá, cokoliv, co následuje za \c
bude potlačeno.
$ echo -e "I am using \cCosmic Desktop" I am using
Vrácení vozíku - \r
Když \r
Pokud se použije, kurzor se resetuje na první znak a cokoli, co následuje za \r
se vytiskne a nahradí existující znaky.
$ echo -e "I use Arch, \rBtw" Btwse Arch,
Zakázat interpretaci zpětného lomítka
Výchozí chování echo
příkaz je, že bude se speciálními znaky zacházet jako s prostým textem, pokud není -e
vlajka je předána. Stejného chování lze dosáhnout použitím -E
vlajka.
Ukážu vám příklad.
Dovolte mi spustit echo
příkaz bez jakýchkoli příznaků:
$ echo "Welcome to OSTechNix \nblog" Welcome to OSTechNix \nblogOSTechNix
Dále spustím stejný příkaz s -E
Vlajka:
$ echo -E "Welcome to OSTechNix \nblog" Welcome to OSTechNix \nblogOSTechNix
Jak můžete vidět, výsledek je podobný, když jsem spustil echo
příkaz s -E
vlajky a bez jakékoli vlajky. V obou případech echo
příkaz zpracovává /n
speciální znak jako prostý řetězec.
Nyní mi dovolte znovu spustit stejný příkaz, ale tentokrát s -e
vlajka.
$ echo -e "Welcome to OSTechNix \nblog"
Welcome to OSTechNix
blog
Všimli jste si rozdílu? Příkaz echo nezpracoval /n
znak jako prostý text a zobrazí vše, co následuje za /n
speciální znak na novém řádku.
Pokud tedy chcete použít nějaké speciální znaky jako \n
, \t
, \v
atd., měli byste použít -e
vlajka. Jinak echo
bude vše považovat za prostý řetězec.
Dovolte mi ukázat vám další příklad.
$ echo -e "Hello world\nHello World\nHello World" Hello world Hello World Hello World
Jak vidíte ve výše uvedeném výstupu, echo
příkaz zobrazí "Hello World"
řetězec třikrát, jeden po druhém (tj. na nový řádek).
Co když chcete uniknout pouze konkrétní speciální postavě? Zde je dvojité zpětné lomítko (\\
) přichází na pomoc.
Například chci uniknout třetímu /n
speciální znak v předchozím příkazu.
Abych tak učinil, přidám před třetí speciální znak dvojité zpětné lomítko (\\
) jako níže:
$ echo -e "Hello world\nHello World\\\nHello World" Hello world Hello World\nHello World
Nyní echo
příkaz zpracovává třetí \n
speciální znak jako prostý řetězec.
Pokud tedy máte mnoho speciálních znaků a chcete uniknout pouze konkrétnímu speciálnímu znaku, musíte přidat dvojité zpětné lomítko (\\
) před tímto speciálním znakem.
Závěr
V tomto článku jsme viděli, co echo
příkaz je a různé způsoby jeho použití. Toto je velmi jednoduchý příkaz a bez použití echo
nebude žádný shell skript pokud se nerozhodnete použít printf
což je alternativa pro echo
příkaz v bash.
Související čtení:
- Bash Scripting – proměnné vysvětlené na příkladech
- Bash Scripting – funkce vysvětlené na příkladech
- Bash Scripting – pro smyčku vysvětlenou s příklady
- Bash Scripting – smyčka Zatímco a dokud není vysvětlena příklady