【问题标题】:How to pass array to bash shell script? [duplicate]如何将数组传递给 bash shell 脚本? [复制]
【发布时间】:2016-08-16 22:08:50
【问题描述】:

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

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

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

我做错了什么,我该如何解决?

【问题讨论】:

标签: arrays linux bash shell unix


【解决方案1】:

尝试将second.sh 中的ARR=$1 更改为ARR=("$@")。 $1 假设一个变量,但您需要序列化所有数组项。

【讨论】:

【解决方案2】:

使用

sh second.sh "${AR[@]}"

将数组元素拆分为不同的参数,即

sh second.sh "${A[0]}" "${A[1]}" "${A[2]}" ...

并在second.sh 中使用

ARR=("$@")

将命令行参数收集到一个数组中。

【讨论】:

  • 按照惯例,环境变量(PATH、EDITOR、SHELL、...)和内部 shell 变量(BASH_VERSION、RANDOM、...)全部大写.所有其他变量名称应为小写。由于变量名区分大小写,因此此约定可避免意外覆盖环境变量和内部变量。
猜你喜欢
  • 2021-04-16
  • 2015-02-05
  • 2015-12-19
  • 2013-06-18
  • 2012-06-03
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多