我是编写Shell Scripts的新手,我遇到了一些困难。
我想要实现的目标
我在scriptOne.sh
中有一个字符串数组,我希望传递给scriptTwo.sh
我做得太远
我可以使用./scriptTwo.sh
从第一个脚本中执行第二个脚本,并使用./scriptTwo.sh $variableOne
将字符串变量从一个传递到另一个。
问题是当我尝试传递一个数组变量时它没有被传递。我设法让它使用./scriptTwo.sh "${array[@]}"
传递数组的第一个条目,但这只是其中一个条目,我需要所有条目。
提前感谢您的帮助
答案 0 :(得分:7)
传递数组的方式是正确的
./scriptTwo.sh "${array[@]}"
问题可能在于您收到它的方式。在scriptTwo.sh
中,使用
array=("$@")
答案 1 :(得分:0)
如果您使用声明命令,我认为我们可以直接从sriptOne.sh中读取数组内容。
我在scriptOne.sh中声明了一个名为wes_batch_array的关联数组,我想将其传递给scriptTwo.sh,因此我将下面的命令放在scriptTwo.sh中:
declare -A wes_batch_array=$(awk -F '=' '{if ($1 ~ /^declare -A wes_batch_array/) {for (i=2;i<NF;i++) {printf $i"=";} printf $NF"\n";}}' < scriptOne.sh)
我已经测试了此命令,它可以正常工作。
如果不使用声明命令。您可以将数组的内容回显到另一个中间临时文件,并使用上面的awk命令来获取bash数组的内容。
答案 2 :(得分:0)
我解决这个问题的方法是遍历 script1.sh 中的数组,然后使用 for 循环将数组元素传递给 script2.sh。就我而言,我将许多元素数量不同的数组传递给不同服务器上的同一个 script2.sh。
例如:
script1.sh:
records="111111111 222222222 333333333"
myRecordsArray=($records)
for (( i=0 ; i < $(#myRecordsArray[@]} ; i++ )); do
./script2.sh ${myRecordsArray[i]}
done
script2.sh:
main () {
<some code here>
}
myRecord=$1
main $myRecord