web-dev-qa-db-ja.com

関数の$ 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?
13
pietro letti

定位置パラメーターは、スクリプトのメインレベルのスクリプトの引数を参照しますが、関数本体の関数引数を参照します。そう

print_something Something

実際にはSomethingを出力します。

スクリプトの引数を関数に渡したい場合は、明示的に行う必要があります。使用する

print_something "$1"

最初の引数を渡す、または

print_something "$@"

これらすべてを渡すには、例の関数は最初の関数のみを使用します。

41
weirdan

これは、呼び出された関数が、親の/呼び出し元のセットとは関係なく、独自の位置パラメータのセットを取得するためです。試す

print_something "$1"

(およびecho "$1"、またはさらに良いprintf '%s\n' "$1"、パラメータ展開を引用することを忘れないでください。echoは任意のデータには使用できません)。

10
RudiC