Jak przekazać wszystkie argumenty przekazane do mojego skryptu bash do mojej funkcji?
Powiedzmy, że zdefiniowałem function abc()
, który będzie obsługiwał całą logikę związaną z analizą argumentów przekazywanych do mojego skryptu.
Jak mogę przekazać do niego wszystkie argumenty, które otrzymał skrypt bash? Liczba paramów jest zmienna, więc nie mogę po prostu zakodować argumentów przekazywanych w ten sposób:
abc $1 $2 $3 $4
Edit . Jeszcze lepiej, czy jest jakiś sposób, aby moja funkcja miała dostęp do zmiennych argumentów skryptu?
6 answers
Pet peeve: gdy używasz $@
, powinieneś (prawie) zawsze umieszczać go w cudzysłowach, aby uniknąć mylenia argumentów ze spacjami:
abc "$@"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-28 20:24:18
Potrzebowałem wariacji na ten temat, która spodziewam się, że będzie przydatna dla innych:
function diffs() {
diff "${@:3}" <(sort "$1") <(sort "$2")
}
Część "${@:3}"
oznacza wszystkie elementy tablicy zaczynające się od 3. Tak więc ta funkcja implementuje posortowane rozróżnienie, przekazując dwa pierwsze argumenty do diff poprzez sort, a następnie przekazując wszystkie inne argumenty do diff, więc możesz wywołać go podobnie do diff:
diffs file1 file2 [other diff args, e.g. -y]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-17 16:05:27
Użyj zmiennej $@
, która rozszerza się na wszystkie parametry wiersza poleceń oddzielone spacjami.
abc "$@"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-29 17:51:56
Oto prosty skrypt:
#!/bin/bash
args=("$@")
echo Number of arguments: $#
echo 1st argument: ${args[0]}
echo 2nd argument: ${args[1]}
$#
jest liczbą argumentów otrzymanych przez skrypt. Łatwiej jest uzyskać do nich dostęp za pomocą tablicy: linia args=("$@")
umieszcza wszystkie argumenty w tablicy args
. Aby uzyskać do nich dostęp, użyj ${args[index]}
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-10 12:44:23
Warto wspomnieć, że za pomocą tej składni można określić zakresy argumentów.
function example() {
echo "line1 ${@:1:1}"; #First argument
echo "line2 ${@:2:1}"; #Second argument
echo "line3 ${@:3}"; #Third argument onwards
}
Nie widziałem, żeby o tym wspominano.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-22 23:24:43
abc "$@"
$@
reprezentuje wszystkie parametry podane do skryptu bash.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-09 10:09:32