Fish Shell:
Чтение аргументов командной строки
Как это сделать:
Допустим, greet.fish
- это ваш скрипт. Вы хотите, чтобы он принимал имя и выдавал приветствие.
#!/usr/bin/env fish
# Аргументы хранятся в $argv
# $argv[1] - это первый аргумент, $argv[2] - второй и т.д.
set name $argv[1]
echo "Привет, $name!"
Запустите его:
$ fish greet.fish Мир
Привет, Мир!
Теперь с несколькими аргументами:
#!/usr/bin/env fish
# Проходим через все аргументы
for arg in $argv
echo "Привет, $arg!"
end
Попробуйте:
$ fish greet.fish Земля Марс Венера
Привет, Земля!
Привет, Марс!
Привет, Венера!
Для обработки флагов (например, -u
для верхнего регистра):
#!/usr/bin/env fish
# Проверяем наличие аргумента "-u"
set -l uppercase_mode off
for arg in $argv
if test "$arg" = "-u"
set uppercase_mode on
else if set -q uppercase_mode[1]; and string match --quiet -- "$uppercase_mode" "on"
echo (string upper "$arg")
else
echo $arg
end
end
И вызываем:
$ fish greet.fish -u меркурий венера
МЕРКУРИЙ
ВЕНЕРА
Глубокое Погружение
Fish Shell давно имеет возможности работы с аргументами командной строки, точно так же, как и другие оболочки. Что выделяет Fish, так это его простота по дизайну. Здесь нет необходимости помнить $1, $2... $n
; это массив $argv
, знакомая территория, если вы занимаетесь другими языками программирования.
Есть альтернативы, такие как bash, zsh и т.д., но синтаксис скриптов в Fish стремится быть более читаемым и понятным. Вместо традиционных команд shift
или работы с $@
для всех аргументов, в Fish есть дружелюбный $argv
и прекрасные структуры скриптов, такие как циклы for
и условия if
, которые меньше о криптических символах и больше о ясных словах.
При реализации важно учитывать, как ваш скрипт будет использоваться. Будут ли нужны значения по умолчанию? Будут ли пользователи знать, что вводить? Убедитесь, что вы обрабатываете случаи, когда пользователи забывают передать аргументы или передают их в неправильном порядке.
Смотрите также
- Официальная документация Fish по аргументам командной строки: fishshell.com/docs/current/#syntax-command-line
- Для продвинутого скриптинга и создания собственных функций в Fish: fishshell.com/docs/current/#defining-functions
- Введение в Fish для пользователей с опытом работы в других оболочках: fishshell.com/docs/current/tutorial.html