次の変数を使用して、位置パラメータを取得します。
$1, $2, $3, etc.
$@
$#
ただし、スクリプトの定位置パラメーターと関数の定位置パラメーターの両方に使用されます。
これらの変数を関数内で使用すると、関数の位置パラメーターが与えられます。
関数内からスクリプトの定位置パラメーターを取得する方法はありますか?
いいえ、直接ではありません。関数パラメーターがマスクするためです。しかし、Bashまたはkshでは、スクリプトの引数を 個別の配列 に割り当て、それを使用するだけで済みます。
#!/bin/bash
ARGV=("$@")
foo() {
echo "number of args: ${#ARGV[@]}"
echo "second arg: ${ARGV[1]}"
}
foo x y z
配列の番号付けはゼロから始まるため、$1
に行く ${ARGV[0]}
など.
Bashを使用してスクリプトのパラメーターを取得する別の方法は、シェル変数BASH_ARGCおよびBASH_ARGVを使用することです
#!/bin/bash
shopt -s extdebug
test(){
echo 'number of element in the current bash execution call stack = '"${#BASH_ARGC[*]}"
echo 'the script come with '"${BASH_ARGC[$((${#BASH_ARGC[*]}-1))]}"' parameter(s)'
echo 'the first is '"${BASH_ARGV[$((${#BASH_ARGV[*]}-1))]}"
echo 'there is 2 way to get the parameters of this function'
echo 'the first is to get $1,...,$n'
echo '$1 = '"$1"
echo '$2 = '"$2"
echo 'the second with the use of BASH_ARGC and BASH_ARGV'
echo 'this function '"${FUNCNAME[0]}"' come with '"${BASH_ARGC[0]}"' parameter(s)'
echo 'the second is '"${BASH_ARGV[0]}"
echo 'the first is '"${BASH_ARGV[1]}"
}
essai(){
test paramtest1 "$3"
}
essai paramessai1 paramessai2 paramessai3