如何解决在嵌套bash脚本之间传递数组变量
#!/bin/bash
var=10 #Variable to pass to the nested script
./nested.bash $var #Pass 'var' to the nested script,which outputs the 'list' array
echo $list #echo the output of the nested script
嵌套脚本(nested.bash)是:
#!/bin/bash
if [ $1 == 10 ] ; then
list=(10-10 20-01 30-03 40-01 50-05)
fi
export list
我使用了export
,但是它不起作用。 “ nested.bash”如何将list
数组传递给“ main.bash”?更笼统地说,该怎么做?
解决方法
最简单的解决方案是使用.
来获取脚本。这将在当前的Shell进程中运行它,而不是在子进程中运行它,这意味着外部脚本可以看到嵌套脚本所做的更改。
主要
#!/bin/bash
var=10
. ./nested.bash "$var"
echo "${list[@]}"
nested.bash
if [ "$1" == 10 ]; then
list=(10 20 30 40 50)
fi
注意:
-
可执行文件通常不应具有扩展名。调用者不需要知道脚本是用bash还是python编写的,还是编译的C程序。首选
main
胜过main.bash
。
另一方面, -
源脚本应该具有扩展名,因为它们需要在特定的解释器中执行。将内部脚本命名为
nested.bash
。 -
总是引用变量扩展名。
-
数组扩展为
"${list[@]}"
。如果您写$list
,只会得到第一个元素。 -
您不必传递
"$var"
并在嵌套脚本中将其引用为"$1"
。您可以根据需要直接引用"$var"
。
您不能将变量导出到父进程。 export
仅用于将变量传递给子进程。导出数组也是不可能的。
将数据发送回父进程的方法是使用命令替换通过标准输出。
main.bash
:
#!/bin/bash
var=10
list=($(./nested.bash "$var"))
echo "${list[@]}"
nested.bash
:
#!/bin/bash
if [ $1 == 10 ] ; then
list=(10 20 30 40 50)
fi
echo "${list[@]}"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。