hae*_*lix 14 parameters bash split cpu-word
在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"
Run Code Online (Sandbox Code Playgroud)
调用脚本给了我
myscript.sh a b 'c d'
a
b
c
d
.
x
y
'z
t'
Run Code Online (Sandbox Code Playgroud)
由于有两个列表,它们必须作为一个整体传递给函数,问题是,如何在尊重单引号'cd'和'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'
Run Code Online (Sandbox Code Playgroud)
调用脚本给了我
myscript.sh a b 'c d'
c d
b
a
.
x
y
z t
Run Code Online (Sandbox Code Playgroud)
......我需要的是什么(除了第一个列表被反转,但我认为这是可以容忍的)
Pet*_*r.O 10
function params()
{
arg=("$@")
for ((i=1;i<=$1;i++)) ;do
echo "${arg[i]}"
done
echo .
for ((;i<=$#-$1+2;i++)) ;do
echo "${arg[i]}"
done
}
items=(w x 'z t')
params $# "$@" "${items[@]}"
Run Code Online (Sandbox Code Playgroud)
假设您使用args调用脚本a b 'c d'
,输出为:
a
b
c d
.
x
y
z t
Run Code Online (Sandbox Code Playgroud)