Spec-Zone.ru › Fish 3.7

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

Команда while является удобным способом обработки выходных данных команды строка за строкой:

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 barb' (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.7/cmds/read.html

Spec-Zone.ru

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