Úvod
Bash read command je vestavěný nástroj, který čte text ze standardního vstupu. Tento nástroj nabízí mnoho funkcí pro čtení uživatelského vstupu a pomáhá tak učinit skripty Bash interaktivní.
Tato příručka vysvětluje, jak se Bash read příkaz pracuje prostřednictvím různých příkladů a případů použití.
Předpoklady
- Přístup k příkazovému řádku/terminálu.
- Základy práce s proměnnými prostředí.
Syntaxe čtení Bash
Syntaxe pro read Bash příkaz je:
read <options> <arguments>
read příkaz převezme vstup uživatele a rozdělí řetězec do polí, přičemž každé nové slovo přiřadí argumentu. Pokud je proměnných méně než slov, read uloží zbývající termíny do konečné proměnné.
Zadání názvů argumentů je volitelné. Příkaz uloží vstup uživatele do $REPLY ve výchozím nastavení proměnná.
Možnosti čtení Bash
Bash read Příkaz přichází s mnoha možnostmi ovládání uživatelského vstupu. Některé možnosti nevyžadují další parametry, zatímco jiné mají povinné parametry.
Níže uvedená tabulka ukazuje všechny možné možnosti příkazů a jejich popis.
| Možnost | Popis |
|---|---|
-a <array> | Přiřadí zadanou posloupnost slov proměnné s názvem <array> . |
-d <delimiter> | Přečte řádek, dokud nezadáte <delimiter> místo nového řádku. |
-e | Spustí interaktivní shellovou relaci pro získání řádku ke čtení. |
-i <prefix> | Přidá počáteční text před čtením řádku jako předponu. |
-n <number> | Vrátí se po přečtení zadaného počtu znaků při respektování oddělovače pro předčasné ukončení. |
-N <number> | Vrátí se po přečtení zadaného počtu znaků, ignoruje oddělovač. |
-p <prompt> | Před čtením uživatelského vstupu vypíše řetězec výzvy. |
-r | Zakažte zpětná lomítka pro únikové znaky. |
-s | Neodpovídá vstupu uživatele. |
-t <time> | Časový limit příkazu vyprší po zadané době v sekundách. |
-u <file descriptor> | Čtení z deskriptoru souboru namísto standardního vstupu. |
Pokračujte ve čtení a zjistěte, jak funguje příkaz read funguje na různých příkladech.
Příklady čtení Bash
read příkaz funguje bez jakýchkoli argumentů nebo voleb. Chcete-li příkaz otestovat, postupujte podle následujících kroků:
1. Otevřete terminál.
2. Napište příkaz a stiskněte Enter :
read
Výzva čeká na vstup uživatele.
3. Napište větu a stiskněte Enter .
Terminál se vrátí do normálního stavu.
4. Načtěte zprávu pomocí příkazu echo:
echo $REPLY
$REPLY proměnná ukládá read příkazová zpráva.
Níže jsou uvedeny příklady demonstrující složitější případy použití pro read Bash příkaz.
Argumenty
Uložte vstup uživatele do zadané proměnné zadáním argumentu:
read input Získejte zprávu pomocí:
echo $input
Případně rozdělte uživatelský vstup do různých proměnných přidáním více argumentů.
Například:
read var1 var2 Uživatelský vstup se rozdělí na jednotlivá slova. Získejte je pomocí:
echo $var1
echo $var2
Když uživatelský vstup obsahuje více slov, než je proměnných, další slova jsou přiřazena poslední poskytnuté proměnné:
read var1 var2 foo bar baz echo $var1
echo $var2
Pokud je slov méně než proměnných, jsou zbývající proměnné prázdné.
Potrubí
Piping přebírá standardní výstup z jednoho příkazu a analyzuje jej jako standardní vstup pro jiný proces. Použijte echo a informace pomocí kanálu read pro okamžitou analýzu. Například:
echo "Hello world!" | (read var1 var2; echo $var1; echo $var2)
Závorky vytvářejí subshell s více příkazy a jednotlivé proměnné se tisknou do konzole.
Heredoc
Další způsob, jak vložit text do read příkaz používá notaci heredoc. Například:
read var1 var2 <<< "Hello world!"
echo $var1
echo $var2
read příkaz očekává literál vstupního proudu a identifikátor přesměrování (<<< ) zadá herestring.
Oddělovače
read příkaz definuje dva typy oddělovačů:
1. Oddělovač pro read příkaz.
Ve výchozím nastavení stiskněte Enter (nový řádek) ukončí příkaz. Přidejte -d tag a poskytněte jiný oddělovač v uvozovkách pro jiné ukončení.
Například:
read -d "-"
Namísto nového řádku je novým oddělovačem pomlčka (- ) místo nového řádku. Příkaz skončí při dosažení oddělovače, bez ohledu na počet argumentů. Odpověď v $REPLY nebo poskytnutá proměnná ukládá uživatelský vstup bez pomlčky (- ).
2. Oddělovač pro rozdělení polí.
Proměnná $IFS (Interní oddělovač polí) ukládá oddělovače slov. Výchozí hodnota, kterou se slova dělí, je mezera " ". Nastavte $IFS proměnnou na jinou hodnotu pro ovládání tohoto chování.
Chcete-li například slova oddělit pomlčkami, použijte:
IFS="-"
echo "Hello-world!" | (read var1 var2; echo $var1; echo $var2)
Přidejte různé oddělovače k rozdělení polí podle různých hodnot:
IFS="-_"
echo "Hello_world-!" | (read var1 var2 var3; echo $var1; echo $var2; echo $var3)
Oddělovač je dlouhý jeden znak a $IFS bere každý uvedený oddělovač jednotlivě.
Výzva
Pomocí příkazu read vytvořte interaktivní výzvy. Přidejte -p tag a zadejte text výzvy, například:
read -p "Enter your username: " username
Text výzvy se vytiskne a vyžaduje vstup uživatele. Text se uloží do proměnné $username .
echo Your username is $username.
Použijte -p možnost ve skriptech Bash pro práci s rychlým vytvářením.
Skrýt vstup uživatele
read příkaz nabízí -s tag pro skrytí zadávání citlivých informací. Běžným případem použití je kombinace -s pomocí -p pro vytvoření výzvy k zadání hesla.
Například:
read -p "Enter your password: "$'\n' -s password Vstup uživatele je neviditelný. Při opakování zprávy se však zobrazí heslo:
echo $password
Dejte si pozor na toto chování při používání read ve skriptech, které vyzývají k zadání hesla.
Nastavit limit počtu znaků
Příkaz read nabízí dvě možnosti při omezení počtu znaků pro uživatelský vstup:
1. Použijte -n a zadejte číslo pro nastavení limitu počtu znaků. Například:
read -n 3
Stiskněte Enter po jednom znaku pro ukončení příkazu před dosažením limitu počtu znaků. Bez stisknutí klávesy Enter , příkaz se po třech znacích automaticky ukončí.
2. Použijte -N a zadejte číslo pro nastavení limitu znaků při ignorování oddělovače. Například:
read -N 3
Stiskněte Enter neukončí příkaz. Stisk klávesy se však počítá jako znak.
Nastavit časový limit
Nastavte časový limit pro read pro omezení času potřebného k zadání textu:
read -t 5 Příkaz se automaticky ukončí po uplynutí poskytnutého časového limitu.
Pole
Místo použití jednotlivých proměnných k ukládání řetězce přidejte -a možnost uložit vstup do pole. Například:
read -a array <<< "Hello world!" Získejte prvky pole pomocí:
echo ${array[0]}
echo ${array[1]}
Případně použijte k iteraci pole cyklus for.
Escape znaky a zpětná lomítka
read příkaz umožňuje rozdělení dlouhých vstupů do více řádků pomocí zpětných lomítek. Například:
read password prompt terminal output Hello \
world\
!
Stiskněte Enter za zpětným lomítkem neukončí příkaz a očekává další vstup na následujícím řádku.
Chcete-li ignorovat interpretaci zpětného lomítka, přidejte -r možnost:
read -r <<< "Hello\world!"; echo $REPLY
Tuto možnost použijte při analýze cest k souboru a jakéhokoli textu, kde má význam zpětné lomítko.