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