Команда Bash read

Linux Bash чтение

Bash поставляется с рядом встроенных команд, которые можно использовать в командной строке или в скриптах оболочки.

В этой статье мы рассмотрим встроенную команду read .

Bash read встроенный

read — встроенная команда bash, которая считывает строку из стандартного ввода (или из файлового дескриптора) и разбивает её на слова. Первое слово присваивается первому имени, второе — второму и так далее.

Общий синтаксис встроенной функции read имеет следующий вид:

 read [ options ] [ name... ]

Чтобы продемонстрировать работу команды, откройте терминал, введите read var1 var2 и нажмите Enter. Команда будет ожидать ввода пользователем. Введите два слова и нажмите Enter.

 read var1 var2 Hello, World!

Слова присваиваются именам, которые передаются команде read в качестве аргументов. Для проверки используйте echo или printf :

 echo $var1 echo $var2
 Hello, World!

Вместо ввода текста на терминале вы можете передать стандартный ввод для read , используя другие методы, такие как конвейеризация, here-string или heredoc :

 echo "Hello, World!" | (read var1 var2; echo -e "$var1 n$var2")

read и echo заключены в скобки и выполняются в одной и той же подоболочке.

 Hello, World!

Вот пример использования строки here и printf :

 read -r var1 var2 <<< "Hello, World!" printf "var1: %s nvar2: %sn" "$var1" "$var2"
 Var1: Hello, Var2: World!

Если аргумент команды read не указан, вся строка присваивается переменной REPLY :

 echo "Hello, world!" | (read; echo "$REPLY")
 Hello, World!

Если количество аргументов, переданных для read превышает количество слов, считанных из входных данных, то оставшиеся слова присваиваются фамилии:

 echo "Linux is awesome." | (read var1 var2; echo -e "Var1: $var1 nVar2: $var2")
 Var1: Linux Var2: is awesome.

В противном случае, если количество аргументов меньше количества имен, оставшимся именам присваивается пустое значение:

 echo "Hello, World!" | (read var1 var2 var3; echo -e "Var1: $var1 nVar2: $var2 nVar3: $var3")
 Var1: Hello, Var2: World! Var3:

По умолчанию read интерпретирует обратную косую черту как экранирующий символ, что иногда может приводить к непредсказуемому поведению. Чтобы отключить экранирование обратной косой черты, вызовите команду с опцией -r .

Ниже приведен пример, показывающий, как работает read при вызове с опцией -r и без нее:

 read <<< "Hello, tWorld!" printf %s "$REPLY"
 Hello, tWorld!
 read -r <<< "Hello, tWorld!" printf %s "$REPLY"
 Hello, tWorld!

Как правило, read всегда следует использовать с опцией -r .

Изменение разделителя

По умолчанию функция read разбивает строку на слова, используя один или несколько пробелов, табуляций и символов перевода строки в качестве разделителей. Чтобы использовать другой символ в качестве разделителя, присвойте его переменной IFS (Internal Field Separator).

 echo "Linux:is:awesome." | (IFS=":" read -r var1 var2 var3; echo -e "$var1 n$var2 n$var3")
 Linux is awesome.

Если в качестве IFS задан символ, отличный от пробела или табуляции, слова разделяются ровно одним символом:

 echo "Linux::is:awesome." |  (IFS=":" read -r var1 var2 var3 var4; echo -e "Var1: $var1 nVar2: $var2 nVar3: $var3 nVar4: $var4")

Строка разделена четырьмя словами. Второе слово — пустое значение, представляющее сегмент между разделителями. Оно создано благодаря использованию двух символов-разделителей, расположенных рядом друг с другом ( :: ).

 Var1: Linux Var2: Var3: is Var4: awesome.

Для разделения строки можно использовать несколько разделителей. При указании нескольких разделителей присваивайте символы переменной IFS без пробела между ними.

Вот пример использования _ и - в качестве разделителей:

 echo 'Linux_is-awesome.' | (IFS="-_" read -r var1 var2 var3; echo -e "$var1 n$var2 n$var3")
 Linux is awesome.

Номер строки

При написании интерактивных bash-скриптов вы можете использовать команду read для получения ввода пользователя.

Чтобы указать строку приглашения, используйте опцию -p . Приглашение выводится перед выполнением read и не содержит символа новой строки.

Вот простой пример:

 read -r -p "Are you sure?"

Обычно команда read используется внутри цикла while , чтобы заставить пользователя дать один из ожидаемых ответов.

Приведенный ниже код предложит пользователю перезагрузить систему :

 while true ; do read -r -p "Do you wish to reboot the system? (Y/N): " answer case $answer in [ Yy ] * ) reboot ; break ;; [ Nn ] * ) exit ;; * ) echo "Please answer Y or N." ;; esac done

Если сценарий оболочки просит пользователей ввести конфиденциальную информацию, например пароль, используйте опцию -s , которая сообщает read не выводить ввод на терминал:

 read -r -s -p "Enter your password: "

Присвоить слова массиву

Чтобы присвоить массиву слова вместо имен переменных, вызовите команду read с опцией -a :

 read -r -a MY_ARR <<< "Linux is awesome." for i in " ${ MY_ARR [@] } " ; do echo " $i " done
 Linux is awesome.

Если указаны и массив, и имя переменной, все слова присваиваются массиву.

Заключение

Команда read используется для разделения строки ввода на слова.

Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.

терминал bash

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *