Как получить доступ к аргументам для функций, если имеется более 9 аргументов?
С первыми 9 аргументами, передаваемыми из $1- $9, $10 интерпретируется как $1, а затем 0. Как мне объяснить это и получить доступ к аргументам для функций больше 10?
Спасибо.
Ответы
Ответ 1
Использование:
#!/bin/bash
echo ${10}
Чтобы проверить разницу с 10 $, код в foo.sh:
#!/bin/bash
echo $10
echo ${10}
Тогда:
$ ./foo.sh first 2 3 4 5 6 7 8 9 10
first0
10
То же самое верно, если у вас есть:
foobar=42
foo=FOO
echo $foobar # echoes 42
echo ${foo}bar # echoes FOObar
Используйте {}
, когда вы хотите удалить неоднозначность...
my2c
Ответ 2
Если вы используете bash, вы можете использовать ${10}
.
Синтаксис ${...}, похоже, соответствует POSIX в данном конкретном случае, но может быть предпочтительнее использовать команду shift
следующим образом:
while [ "$*" != "" ]; do
echo "Arg: $1"
shift
done
EDIT: Я заметил, что не объяснил, что делает shift
. Он просто сдвигает аргументы script (или функции). Пример:
> cat script.sh
echo "$1"
shift
echo "$1"
> ./script.sh "first arg" "second arg"
first arg
second arg
В случае, если это может помочь, вот пример с getopt/shift:
while getopts a:bc OPT; do
case "$OPT" in
'a')
ADD=1
ADD_OPT="$OPTARG"
;;
'b')
BULK=1
;;
'c')
CHECK=1
;;
esac
done
shift $( expr $OPTIND - 1 )
FILE="$1"
Ответ 3
В целом, чтобы быть уверенным, что вся данная строка используется для имени переменной, когда Bash интерпретирует код, вы должны заключить ее в фигурные скобки: ${10}