我将多个参数传递给shell脚本。 我那个脚本我想创建一个从第二个参数到最后一个参数的数组。 我可以在下面做 -
arg=$1
shift
while [[ $1 != '' ]]
do
emailID[${#emailID[@]}]=$1
shift
done
这个emailID数组我想作为第二个参数传递给第二个脚本,我想在第二个脚本中检索数组。 有没有办法在ksh / bash中做到这一点?
答案 0 :(得分:4)
只需使用${@:2}
即可。完全解释here。
并将其传递给另一个脚本:
./anotherScript "${@:2}"
当然它不会将它作为数组传递(因为你不能传递数组),但它会将该数组的所有元素作为单独的参数传递。
好的,让我们这样试试吧。这是你的第一个脚本:
#!/bin/bash
echo "Here is my awesome first argument: $1"
var=$1 # I can assign it into a variable if I want to!
echo 'Okay, and here are my other parameters!'
for curArg in "${@:2}"; do
echo "Some arg: $curArg"
done
myArr=("${@:2}") # I can assign it into a variable as well!
echo 'Now lets pass them into another script!'
./anotherScript 'Wheeee' "${@:2}"
这是你的另一个剧本:
#!/bin/bash
echo 'Alright! Here we can retrieve some arguments!'
echo "Here we go: $@" # that is including 'Wheeee' from the previous script. But we can use the same trick from above if we want to.
答案 1 :(得分:2)
您可以使用:
arg="$1"
shift
emailID=( "$@" )
第二个赋值从剩余的参数中创建一个数组。这些天你可能会在$1
附近没有引号;它并不总是如此,我使用双引号来保持一致性。
然后,您可以将数组传递给第二个脚本:
second_script "${emailID[@]}"
但是,由第二个脚本决定是否将参数视为数组。它与传递一些单独的参数没有区别。您无法将数组与数组之前或之后的参数区分开来。