
この単純なbashスクリプトがなぜ印刷されないのですかecho $1
?$1
#!/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
任意のデータと一緒に使用することはできません。)