在 bash 脚本函数中,我需要使用脚本的命令行参数以及另一个参数列表。所以我试图将两个参数列表传递给一个函数,问题是多字参数被拆分。
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'
由于有两个列表,它们必须作为一个整体传递给函数,问题是,如何迭代元素,同时尊重用单引号 '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
...这就是我需要的(除了第一个列表被颠倒了,但我猜这是可以容忍的)