
Почему не работает 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
не могут быть использованы для произвольных данных).