shell 将数组从一个Bash脚本传递到另一个脚本

jfewjypa  于 12个月前  发布在  Shell
关注(0)|答案(4)|浏览(126)

我刚开始写Shell脚本,遇到了一些困难。

我想实现的目标

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

到目前为止我做了什么

我可以使用./scriptTwo.sh从第一个脚本内部执行第二个脚本,并且我已经使用./scriptTwo.sh $variableOne将字符串变量从一个传递到另一个。
问题是当我试图传递一个数组变量时,它没有被传递。我已经设法让它通过使用./scriptTwo.sh "${array[@]}"数组的第一个条目,但这只是其中一个条目,我需要所有的条目。

感谢您的帮助

wwwo4jvm

wwwo4jvm1#

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

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

问题可能在于你如何接受它。在scriptTwo.sh中,使用

array=("$@")
rqqzpn5f

rqqzpn5f2#

我想如果你使用一个declare命令,我们可以直接从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数组的内容。

n53p2ov0

n53p2ov03#

我解决这个问题的方法是遍历www.example.com中的数组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
yeotifhr

yeotifhr4#

关于传递多个数组的问题,我找到了一种肮脏但有效的解决方案,将数组作为字符串传递,并使用IFS将其解析为数组:

IFS=',' read -ra array1 <<< "$1"
IFS=',' read -ra array2 <<< "$2"

for element1 in "${array1[@]}"; do
    for element2 in "${array2[@]}"; do
        echo "Element 1: $element1, Element 2: $element2"
    done
done

相关问题