如何将数组传递给 bash shell 脚本?

如何将数组传递给 bash shell 脚本?

如何将数组作为变量从第一个 bash shell 脚本传递到第二个脚本。

第一个
#!/bin/bash
AR=('foo' 'bar' 'baz' 'bat')
sh second.sh "$AR" # foo
sh second.sh "${AR[@]}" # foo
第二
#!/bin/bash
ARR=$1
echo ${ARR[@]}

两种情况下的结果都是foo。但是我想要的结果是foo bar baz bat

我做错了什么?我该如何改正?

答案1

AR数组通过第一个参数传递给second.sh

第一个

#!/bin/bash
AR=('foo' 'bar' 'a space' 'bat')
printf "AR array contains %d elements: " ${#AR[@]}
printf "%s " "${AR[@]}"
printf "\n"
./second.sh "$AR"
./second.sh "$(printf "(" ; printf "'%s' " "${AR[@]}" ; printf ")")"

请注意,sh不再用于运行second.sh脚本。

这些链接printf用于伪造单个参数,如果某些数组元素包含空格字符,该参数将是安全的。

第二

#!/bin/bash
declare -a ARR=$1
printf "ARR array contains %d elements: " ${#ARR[@]}
printf "%s " "${ARR[@]}"
printf "\n"

----

AR对于使用任意数量的参数将数组传递给脚本的解决方案second.sh

第一个

#!/bin/bash
AR=('foo' 'bar' 'a space' 'bat')
printf "AR array contains %d elements: " ${#AR[@]}
printf "%s " "${AR[@]}"
printf "\n"
./second.sh "$AR"
./second.sh "${AR[@]}"

第二

#!/bin/bash
ARR=( "$@" )
printf "ARR array contains %d elements: " ${#ARR[@]}
printf "%s " "${ARR[@]}"
printf "\n"

----

考试:

$ chmod +x *sh
$ ./first.sh
AR array contains 4 elements: foo bar a space bat
ARR array contains 1 elements: foo
ARR array contains 4 elements: foo bar a space bat

相关内容