Почему $1 в функции не выводит первый аргумент скрипта?

Почему $1 в функции не выводит первый аргумент скрипта?

Почему не работает echo $1печать $1в этом простом скрипте bash?

#!/bin/bash
# function.sh
print_something () {
echo $1
}
print_something

$ ./function.sh 123  -> why doesn't it print '123' as a result?

решение1

Позиционные параметры ссылаются на аргументы скрипта на основном уровне скрипта, ноаргументы функциив теле функции. Так что

print_something Something

на самом деле напечатает Something.

Если вы хотите передать аргументы скрипта в функцию, вы должны сделать это явно. Используйте

print_something "$1"

передать первый аргумент, или

print_something "$@"

чтобы передать их все, хотя функция в примере использует только первый из них.

решение2

Это происходит потому, что вызываемая функция получает свой собственный набор позиционных параметров, независимый от родительского/вызывающего набора. Попробуйте

print_something "$1"

echo "$1", или даже лучше printf '%s\n' "$1", не забудьте заключить в кавычки расширения параметров, которые echoне могут быть использованы для произвольных данных).

Связанный контент