関数宣言内で位置パラメータ(コマンドラインから提供)をどのように使用しますか?
関数定義内では、$ 1と$ 2はグローバル位置パラメータではなく、関数自体の唯一の位置パラメータです!
ベストアンサー1
呼び出し側範囲位置パラメーターは、関数では使用できません。何らかの方法で関数に渡すには呼び出し側が必要です。
ではbash
、配列を使用してこれを実行できます(ただし、以外の配列は1以外のインデックス0から"$@"
始まりますbash
(inと同じですが、ksh
他のすべてのシェルとは反対です)。
f() {
printf 'Caller $1: %s\n' "${caller_argv[0]}"
printf ' My $1: %s\n' "$1"
}
caller_argv=("$@")
f blah
または追加で渡します。
f() {
printf 'Caller $1: %s\n' "$2"
shift "$(($1 + 1))"
printf 'My $1: %s\n' "$1"
}
f "$#" "$@" blah
これには、$1
呼び出し元の位置引数の数が含まれているため、f
独自の引数が始まる場所を知ることができます。