Комментарий Рави - это, по сути, ответ. Функции принимают свои собственные аргументы. Если вы хотите, чтобы они были такими же, как аргументы командной строки, вы должны передать их. В противном случае вы явно вызываете функцию без аргументов.
Тем не менее, вы можете, если хотите, сохранить аргументы командной строки в глобальном массиве для использования в других функциях:
my_function() {
echo "stored arguments:"
for arg in "${commandline_args[@]}"; do
echo " $arg"
done
}
commandline_args=("$@")
my_function
Вы должны получить доступ к аргументам командной строки с помощью commandline_args
переменной, а не $@
, $1
, $2
и т.д., но они доступны. Я не знаю, как назначить напрямую массиву аргументов, но если кто-то знает такой, пожалуйста, просветите меня!
Также обратите внимание на то, как я использовал и цитировал $@
- это то, как вы гарантируете, что специальные символы (пробелы) не испорчены.