Как получить доступ к аргументам для функций, если имеется более 9 аргументов?
С первыми 9 аргументами, передаваемыми из $1- $9, $10 интерпретируется как $1, а затем 0. Как мне объяснить это и получить доступ к аргументам для функций больше 10?
Используйте {}, когда вы хотите удалить неоднозначность...
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}