9

我是编写 Shell 脚本的新手,遇到了一些困难。

我想要达到的目标

我有一个字符串数组scriptOne.sh,我想传递给scriptTwo.sh

到目前为止我做了什么

我可以从第一个 using 内部执行第二个脚本,./scriptTwo.sh并且我已经将字符串变量从一个传递到另一个 using ./scriptTwo.sh $variableOne

问题是当我尝试传递一个数组变量时它没有被传递。我已经设法让它通过数组的第一个条目,./scriptTwo.sh "${array[@]}"但这只是其中一个条目,我需要所有这些条目。

在此先感谢您的帮助

4

3 回答 3

10

您传递数组的方式是正确的

./scriptTwo.sh "${array[@]}"

问题可能在于您接收它的方式。中scriptTwo.sh,使用

array=("$@")
于 2013-04-15T15:51:51.993 回答
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)

我已经测试了这个命令,它工作正常。

如果不使用 declare 命令。您可以将数组的内容回显到另一个中间临时文件,并使用上面的 awk 命令来获取 bash 数组的内容。

于 2020-05-26T07:56:22.703 回答
0

我解决这个问题的方法是遍历 script1.sh 中的数组,然后使用 for 循环将数组元素传递给 script2.sh。在我的情况下,我将许多具有不同数量元素的数组传递给不同服务器上的同一个 script2.sh。

例如:

脚本1.sh:

records="111111111 222222222 333333333"
myRecordsArray=($records)

for (( i=0 ; i < $(#myRecordsArray[@]} ; i++ )); do

./script2.sh ${myRecordsArray[i]}

done

脚本2.sh:

main () {
<some code here>
}

myRecord=$1
main $myRecord
于 2021-02-23T20:51:32.840 回答