bash スクリプト関数内では、スクリプトのコマンド ライン引数と、別の引数リストを操作する必要があります。だから私は2つの引数リストを関数に渡そうとしています.問題は、複数の単語の引数が分割されることです.
function params()
{
for PARAM in $1; do
echo "$PARAM"
done
echo .
for ITEM in $2; do
echo "$ITEM"
done
}
PARAMS="$@"
ITEMS="x y 'z t'"
params "$PARAMS" "$ITEMS"
スクリプトを呼び出すと、
myscript.sh a b 'c d'
a
b
c
d
.
x
y
'z
t'
2 つのリストがあるため、全体として関数に渡す必要があります。問題は、単一引用符 'c d' と 'z t' で囲まれた複数単語の項目を尊重しながら、要素を反復処理する方法です。
私が持っている回避策 (以下を参照) では BASH_ARGV を使用するため、関数に単一のリストを渡すだけで済みます。ただし、何が起こっているのか、上記を機能させるために何が必要なのかをよりよく理解したいと思います。
function params()
{
for PARAM in "${BASH_ARGV[@]}"; do
echo "$PARAM"
done
echo .
for ITEM in "$@"; do
echo "$ITEM"
done
}
params x y 'z t'
スクリプトを呼び出すと、
myscript.sh a b 'c d'
c d
b
a
.
x
y
z t
...これが必要な方法です(最初のリストが逆になっていることを除いて、それは許容できると思います)