Почему не 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?
bash
shell-script
function
Пьетро Летти
источник
источник
Ответы:
Позиционные параметры относятся к аргументам скрипта на основном уровне скрипта, но относятся к аргументам функции в теле функции. Так
будет на самом деле печатать
Something
.Если вы хотите передать аргументы скрипта в функцию, вы должны сделать это явно. использование
передать первый аргумент, или
чтобы передать все из них, хотя функция в примере использует только первый.
источник
"$@"
кprint_something
, как это написано в настоящее время, все равно будет выводить только первый аргумент."$*"
будет одной строкой (объединенной по первому символу$IFS
), а"$@"
будет списком индивидуально цитируемых элементов."$@"
, даже если в этом случае есть только один такой параметр, - охватывать все такие случаи. Если OP решает добавить второй параметр, в вызове функции нечего менять. И все остальные, кто прочитает это, узнают, как это сделать, чтобы избежать необходимости делать это позже.Это связано с тем, что вызываемая функция получает свой собственный набор позиционных параметров, не зависящий от набора родительского / вызывающего. Пытаться
(и
echo "$1"
, что еще лучшеprintf '%s\n' "$1"
, не забывайте указывать расширения параметров, которыеecho
нельзя использовать для произвольных данных).источник
$1
как правило, отличаются от функций$1
, хотя они МОГУТ становиться одинаковыми, если используются, как предложено выше. Если я правильноecho
echo $1
print_something $2
$1
echo $1
не имеет смысла, если только вы не хотите,$1
чтобы его считали списком шаблонов файлов, разделенных $ IFS, для расширения.echo "$1"
будет иметь больше смысла, хотя бы не выводить содержание$1
для значений ,$1
как-nene
,-EE
...