Pro čtení ze vstupu má bash příkaz read. Tento nám dovoluje přečíst údaje ze vstupního proudu (stdin) a načíst je do proměnných bashe. Jeho základní použití je:
$
read prvni druhyhello world
$
echo $prvnihello
$
echo $druhyworld
$
Jak je na uvedeném příkladu vidět, použití read je jednoduché, příkaz přečte „větu“ ze standardního vstupu (stdin) a rozdělí ji podle oddělovače do jednotlivých proměnných.
Oddělovač je znak, nebo množina znaků, které oddělují jednotlivá pole vstupní věty. Jako standardní oddělovač používá read znaky mezera, tabulátor a znak konce řádku. Pokud chceme použít jiný, sdělíme to příkazu read nastavením proměnné IFS
.
$
IFS=" :=\t" read name value restNAME: radek
$
echo "$name='$value'", $restNAME='radek'
Proměnná IFS
má na rozdělování věty na slova (parsing) složitější vliv. Algoritmus rozdělování se chová jinak k regulérním znakům, jako jsou v našem případě ":" a "=" a jinak k bílým znakům jako je mezera " "
, tabulátor "\t"
a znak konce řádku "\n"
. Vyzkoušejte si různé kombinace znaků v IFS a experimentujte i se vstupy. Další informace k rozdělování vstupní věty najdete v části "Word Splitting" manuálové stránky programu bash.
Různé příklady.
Následující dva příklady jsem objevil na http://www.unixguide.net/unix/bash/E4.shtml.
read A B C D << HERE $(IFS=.; echo $(/usr/local/bin/ipaddr)) HERE
read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))