Как передать все аргументы, переданные моему скрипту 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
}

abc "$@"

$@ представляет все параметры, заданные вашему скрипту bash.