Spec-Zone.ru › Fish 3.6

read - чтение строки входных данных в переменные

Синтаксис

read [OPTIONS] [VARIABLE ...]

Описание

read считывает данные со стандартного ввода и либо записывает результат обратно на стандартный вывод (для использования в подстановке команд), либо сохраняет результат в одной или нескольких оболочечных переменных. По умолчанию, read считывает одну строку и разделяет ее на переменные по пробелам или табуляции. В качестве альтернативы, для завершения ввода можно использовать нулевой символ или максимальное количество символов, а также другие разделители. В отличие от других оболочек, нет никакой переменной по умолчанию (такой как REPLY) для хранения результата - вместо этого он выводится на стандартный вывод.

Доступны следующие параметры:

-c CMD или --command CMD

Устанавливает начальную строку в буфере команд в интерактивном режиме на CMD.

-d или --delimiter DELIMITER

Разделяет по DELIMITER. DELIMITER будет использоваться как целая строка для разделения, а не набор символов.

-g или --global

Делает переменные глобальными.

-s или --silent

Маскирует символы, записанные в терминал, заменяя их звездочками. Это полезно для чтения таких вещей, как пароли или другая конфиденциальная информация.

-f или --function

Ограничивает область действия переменной текущей выполняемой функцией. Она удаляется при завершении функции.

-l или --local

Ограничивает область действия переменной текущим выполняемым блоком. Она удаляется при завершении блока. Вне блока это то же самое, что и --function.

-n или --nchars NCHARS

Заставляет read возвращаться после считывания NCHARS символов или конца строки, в зависимости от того, что произойдет раньше.

-p или --prompt PROMPT_CMD

Использует вывод оболочечной команды PROMPT_CMD в качестве подсказки для интерактивного режима. Команда подсказки по умолчанию set_color green; echo read; set_color normal; echo "> "

-P или --prompt-str PROMPT_STR

Использует PROMPT_STR в качестве подсказки для интерактивного режима. Это эквивалентно echo $PROMPT_STR и предоставляется исключительно для того, чтобы избежать необходимости оформления подсказки как команды. Все специальные символы в строке автоматически экранируются перед передачей команде echo.

-R или --right-prompt RIGHT_PROMPT_CMD

Использует вывод оболочечной команды RIGHT_PROMPT_CMD в качестве правой подсказки для интерактивного режима. Нет команды правой подсказки по умолчанию.

-S или --shell

Включает подсветку синтаксиса, автодополнение и завершение команд, подходящие для ввода кода оболочки в интерактивном режиме. ПРИМЕЧАНИЕ: До версии fish 3.0, короткий параметр для --shell был -s, но он был изменён для совместимости с коротким параметром bash -s для --silent.

-t - или --tokenize

Принуждает read разделить входные данные на переменные по правилам токенизации оболочки. Это означает, что она учтёт кавычки и экранирование. Этот параметр, конечно, несовместим с другими параметрами управления разделением, такими как --delimiter, и не учитывает IFS (как токенизатор fish). Она сохраняет токены так, как они были бы переданы командам в командной строке, например, a\ b хранится как a b. Обратите внимание, что в настоящее время она оставляет подстановки команд неизменными вместе с скобками.

-u или --unexport

Запрещает экспорт переменных в дочерние процессы (поведение по умолчанию).

-U или --universal

Приводит указанную переменную оболочки к универсальному виду.

-x или --export

Экспортирует переменные в дочерние процессы.

-a или --list

Сохраняет результат в виде списка в одной переменной. Этот параметр также доступен как --array для обратной совместимости.

-z или --null

Помечает конец строки символом NUL вместо новой строки. Это также отключает интерактивный режим.

-L или --line

Считывает каждую строку в последующие переменные и останавливается после того, как каждая переменная была заполнена. Это невозможно комбинировать с параметром --delimiter.

Без параметра --line, read считывает одну строку входных данных со стандартного ввода, разбивает её на токены и затем присваивает каждый токен каждой переменной, указанной в VARIABLES. Если токенов больше, чем переменных, остаток целиком присваивается последней переменной.

Если не задан параметр для разделения, такой как --delimiter, --line или --tokenize, используется переменная IFS в качестве списка символов для разделения. Ссылка на использование IFS устарела и это поведение будет удалено в будущих версиях. Значение по умолчанию для IFS содержит пробелы, табуляцию и символы новой строки. В качестве особого случая, если IFS установлено в пустую строку, каждый символ входных данных рассматривается как отдельный токен.

С параметром --line, read считывает строку ввода со стандартного ввода в каждую предоставленную переменную, останавливаясь, когда каждая переменная будет заполнена. Строка не разбивается на токены.

Если имена переменных не указаны, read переходит в специальный случай, который просто обеспечивает перенаправление со стандартного ввода на стандартный вывод, что полезно для подстановки команд. Например, команда оболочки fish ниже может использоваться для чтения данных, которые должны быть предоставлены в качестве аргумента командной строки из консоли вместо того, чтобы жестко задавать их в самой команде, позволяя команде повторно использоваться как есть в различных контекстах с разными входными значениями и предотвращая включение, возможно, конфиденциального текста в историю оболочки:

mysql -uuser -p(read)

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

Если -a или --array указаны, разрешено только одно имя переменной, и токены хранятся в виде списка в этой переменной.

См. документацию по set для получения более подробной информации о правилах области действия переменных.

Когда read достигает конца файла (EOF) вместо разделителя, код возврата устанавливается в 1. В противном случае он устанавливается в 0.

Для защиты оболочки от потребления слишком большого количества системных ресурсов, read будет потреблять максимум 100 МБ (104857600 байт); если разделитель не будет достигнут до этого предела, то VARIABLE устанавливается в пустую строку, а код возврата устанавливается в 122. Этот предел можно изменить с помощью переменной fish_read_limit. Если значение установлено в 0, ограничение снимается.

Пример

read имеет несколько отдельных применений.

Следующий код сохраняет значение ‘hello’ в оболочечной переменной foo.

echo hello|read foo

Хотя это удобный способ обработки выходных данных команды построчно:

printf '%s\n' line1 line2 line3 line4 | while read -l foo
                  echo "This is another line: $foo"
              end

Разделители, заданные с помощью «-d», воспринимаются как одна строка:

echo a==b==c | read -d == -l a b c
echo $a # a
echo $b # b
echo $c # c

--tokenize обрабатывает кавычки и экранирование так же, как передача аргументов оболочки:

echo 'a\ b' | read -t first second
echo $first # outputs "a b", $second is empty

echo 'a"foo bar"b (command echo wurst)*" "{a,b}' | read -lt -l a b c
echo $a # outputs 'afoo bar' (without the quotes)
echo $b # outputs '(command echo wurst)* {a,b}' (without the quotes)
echo $c # nothing

Пример интерактивного использования см. в Запрос пользовательского ввода.

© 2005-2009 Axel Liljencrantz, 2009-2023 fish-shell contributors
Licensed under the GNU General Public License, version 2.
https://fishshell.com/docs/3.6/cmds/read.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API