微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在嵌套bash脚本之间传递数组变量

如何解决在嵌套bash脚本之间传递数组变量

我有一个主脚本(main.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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?