Как передать все аргументы, переданные моему скрипту bash, в мою функцию?
предположим, я определил function abc()
это будет обрабатывать всю логику, связанную с анализом аргументов, переданных моему скрипту.
Как я могу передать все аргументы, которые получил мой скрипт bash? Количество параметров является переменным, поэтому я не могу просто жестко закодировать аргументы, переданные следующим образом:
abc
редактировать. Еще лучше, есть ли способ для моей функции получить доступ к переменным аргументов скрипта?
6 ответов
Pet peeve: при использовании $@
, вы должны (почти) всегда помещать его в двойные кавычки, чтобы избежать неправильного разбора аргумента с пробелами в них:
abc "$@"
мне нужна была вариация на эту тему, которая, как я ожидаю, будет полезна другим:
function diffs() {
diff "${@:3}" <(sort "") <(sort "")
}
на "${@:3}"
часть означает все члены массива, начиная с 3. Таким образом, эта функция реализует сортированный diff, передавая первые два аргумента diff через сортировку, а затем передавая все остальные аргументы diff, поэтому вы можете назвать его аналогично diff:
diffs file1 file2 [other diff args, e.g. -y]
использовать $@
переменная, которая расширяется до всех параметров командной строки, разделенных пробелами.
abc "$@"
вот простой скрипт:
#!/bin/bash
args=("$@")
echo Number of arguments: $#
echo 1st argument: ${args[0]}
echo 2nd argument: ${args[1]}
$#
- количество аргументов, полученных скриптом. Мне легче получить к ним доступ, используя массив:args=("$@")
строка помещает все аргументы в args
массив. Для доступа к ним используйте ${args[index]}
.
стоит отметить, что вы можете указать диапазоны аргументов с помощью этого синтаксиса.
function example() {
echo "line1 ${@:1:1}"; #First argument
echo "line2 ${@:2:1}"; #Second argument
echo "line3 ${@:3}"; #Third argument onwards
}