なぜ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?
定位置パラメーターは、スクリプトのメインレベルのスクリプトの引数を参照しますが、関数本体の関数引数を参照します。そう
print_something Something
実際にはSomething
を出力します。
スクリプトの引数を関数に渡したい場合は、明示的に行う必要があります。使用する
print_something "$1"
最初の引数を渡す、または
print_something "$@"
これらすべてを渡すには、例の関数は最初の関数のみを使用します。
これは、呼び出された関数が、親の/呼び出し元のセットとは関係なく、独自の位置パラメータのセットを取得するためです。試す
print_something "$1"
(およびecho "$1"
、またはさらに良いprintf '%s\n' "$1"
、パラメータ展開を引用することを忘れないでください。echo
は任意のデータには使用できません)。