関数がスクリプトパラメーターで明示的に呼び出されていない場合、スクリプト関数からbashスクリプトパラメーターにアクセスする方法はありますか?
ありがとう。
関数がスクリプトパラメーターで明示的に呼び出されていない場合、スクリプト関数からbashスクリプトパラメーターにアクセスする方法はありますか?
ありがとう。
簡単な答えは「いいえ、私が知っていることではありません」です。
実行する必要がある場合は、スクリプト引数のエイリアスを作成します。
#!/bin/bash
script_args=("$@")
myfunc () {
for a in "$@" ; do
for b in "${script_args[@]}" ; do
echo "$a: $b"
done
done
}
myfunc one two
そして、次のように呼び出します。
./myscript.sh 1 2
出力:
one: 1
one: 2
two: 1
two: 2
いいえ。ただし、Linuxを使用している場合は、スクリプトのコマンドラインを `/proc'から読み取ることでハッキングできます。
function myfunc {
while read -d $'\0'
do
echo "$REPLY"
done < /proc/$$/cmdline
}
-d $'\0'
文字列はNULL(2進ゼロ)で区切られているため、はcmdlineファイルを読み取るために必要です。この例で$REPLY
は、bash自体を含む各パラメーターが順番になります。例えば:
/home/user1> ./gash.sh one two three
/bin/bash
./gash.sh
one
two
three
関数のパラメーターをスクリプトのパラメーターに設定する(そしてそれらを表示する)例を次に示します。
function myfunc {
while read -d $'\0'
do
args="$args $REPLY"
done < /proc/$$/cmdline
set -- $args
shift 2 # Loose the program and script name
echo "$@"
}
スクリプトの引数を使用して関数を呼び出すだけです。
foo () {
for arg in "$@"
do
echo "$arg"
done
}
foo "$@"