从命令行调用Bash脚本变量

尼克拉斯·彼得·奥马利

我有一个接受命令行参数的Bash脚本。该脚本定义了几个字符串数组。该参数确定我要打印哪个数组。由于有许多不同的数组可能供您选择,因此我希望能够在命令行上准确指定要打印的数组。

例如,假设我定义了以下数组:

#/bin/bash
myarray1=(abc 123)
myarray2=(def 456)
myarray3=(ghi 789)
myarray4=(jkl 012)
myarray5=(mno 345)
myarray6=(pqr 678)
myarray7=(stu 901)

我想通过命令行来选择是否我要打印所有的阵列或这些阵列的各种组合,如myarray1myarray3myarray4但是在另一次运行中,我只想打印myarray5myarray7

我理想地希望能够像这样运行脚本:

np ~/usr-bin > bash myscript.bash myarray1 myarray3 myarray4

这样的输出是这样的:

abc 123
ghi 789
jkl 012

或像这样:

np ~/usr-bin > bash myscript.bash myarray5 myarray7

这样的输出是这样的:

mno 345
stu 901

我希望Bash接受这些参数并认识到它们是数组/变量名称,然后像执行此操作一样打印它们: echo $1

我之前几乎没有做过任何Bash脚本编写,而我尝试使用的方法似乎无效。这是可能的吗?或者有比我尝试解决的方法更好的方法吗?

从Bash 4.3(2014-02-26)开始,您可以使用namerefs作为简单的解决方案:

print_arrays() {
  for a in "$@"; do
    # This makes _t_ an alias for the variable whose name is $a
    declare -n _t_="$a"
    echo "${_t_[@]}"
  done
}

在4.3之前的版本中,您需要使用!间接语法。但是,通过间接访问的变量需要包含整个数组引用,包括下标。而且您只能通过变量而不是字符串表达式进行间接操作。因此,您需要执行以下操作:

print_arrays() {
  for a in "$@"; do
    # Construct the "name", which is the subscripted array name
    _t_=${a}[@]
    echo "${!_t_}"
  done
}

如果您不熟悉Bash,则应阅读有关阵列Bash手册,其中介绍了奇怪的语法"${array[@]}"这里的定义_t_旨在创建该语法。它本身不是下标表达式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以从命令行调用groovy脚本方法?

来自分类Dev

在BASH中从命令行创建变量

来自分类Dev

在BASH中从命令行创建变量

来自分类Dev

Bash:在bash脚本中创建一个shell变量,我可以从命令行访问它

来自分类Dev

从命令行调用PowerShell函数

来自分类Dev

要求从命令行调用文件

来自分类Dev

从命令行导出Shell变量

来自分类Dev

从命令行执行bash函数

来自分类Dev

Bash无法从命令行执行

来自分类Dev

在bash中将命令行选项传递给调用的脚本

来自分类Dev

从bash脚本调用时获取Python命令行输出

来自分类Dev

从bash脚本调用时获取Python命令行输出

来自分类Dev

从命令行执行 bash 脚本,该脚本需要一个带空格的参数

来自分类Dev

rm命令!从命令行工作,但不能从bash脚本工作

来自分类Dev

从命令行调用的python脚本中有多个线程

来自分类Dev

在从命令行调用的Jython脚本中使用UCanAccess

来自分类Dev

postgresql-尝试将变量从命令行传递到sql脚本时出错

来自分类Dev

Bash(sed)脚本直接从命令行运行,但不能通过监视运行

来自分类Dev

如何从命令行参数加载 bash 脚本的不同配置?

来自分类Dev

创建命令以从命令行加载Shell脚本

来自分类Dev

如何从命令行获取有关bash变量使用的帮助?

来自分类Dev

Bash Shell从命令行命令到VPN连接

来自分类Dev

从Windows命令行调用脚本

来自分类Dev

从命令行脚本使用PyCharm检查

来自分类Dev

Ruby脚本-不打印“ Hello world!” 从命令行

来自分类Dev

如何从命令行记录PHP脚本的每个输出?

来自分类Dev

Perl从命令行脚本打印单引号

来自分类Dev

如何从命令行执行InDesign扩展脚本?

来自分类Dev

在Windows 7中从命令行执行Python脚本

Related 相关文章

热门标签

归档