【问题标题】:How to pass an array and an associative array between bash scripts?如何在 bash 脚本之间传递数组和关联数组?
【发布时间】:2021-01-28 22:54:09
【问题描述】:

我想在 bash 脚本之间传递一个数组和一个关联数组。

我尝试按照下面的示例发送参数,但收到错误消息:

./b.sh:第 3 行:${1[@]}:错误替换

我该怎么做?

例子:

调用其他脚本 b.sh 的第一个脚本 a.sh

a.sh

#!/usr/bin/bash -x

declare -a array=("a" "b")
declare -A associative_array
associative_array[10]="Hello world"

./b.sh "${array[@]}" $associative_array

b.sh

#!/usr/bin/bash

declare -a array="${1[@]}"
declare -A associative_array="$2"
echo "${array[@]}"
echo "${associative_array[10]}"

【问题讨论】:

  • @TedLyngmo 不,这是错误消息。
  • 对不起,我错过了你的一半问题,所以我删除了该评论。 :-) 两个数组都在我的回答中被实例化了。
  • 你可以考虑source ./b.sh,这样b.sh就可以直接访问这两个数组了。
  • 搜索[bash] pass associative array时有122个Q/A。 stackoverflow.com/questions/5564418/… 看起来有与您的问题直接相关的答案。请先学会搜索。祝你好运。

标签: arrays linux bash


【解决方案1】:

这将是诱饵,因为它使用了邪恶的eval,但您可能会发现它很有用,直到出现更好的解决方案。不要在没有先阅读Why should eval be avoided in Bash, and what should I use instead?的情况下使用它。

a.sh

declare -a array=("a" "b")
declare -A associative_array
associative_array[10]="Hello world"

./b.sh "$(declare -p array)" "$(declare -p associative_array)"

b.sh

eval "$1"
eval "$2"

echo "${array[@]}"
echo "${associative_array[10]}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-03
    • 2023-04-03
    • 2013-06-18
    • 2011-08-12
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多