【问题标题】:How to use variable inside the array如何在数组中使用变量
【发布时间】:2013-01-12 11:02:07
【问题描述】:

我尝试在数组变量中使用变量,但它没有按预期工作。

代码

    ENV2[0]=567
    ENV1[0]=123
    ENV1[1]=789
    if [ $1 -eq 1 ]
    then
    name=ENV1
    echo "${name[0]}"
    echo "${name[1]}"
    else
    name=ENV1
    echo "${name[1]}"
    fi

输出:ENV1 而不是“123”,它在第二个回显部分打印“ENV1”和一个空白行。请帮助获得正确的输出,我是初学者。谢谢

【问题讨论】:

  • 您使用什么语言?尝试名称 = ENV1[0]
  • 嗨 Rusty009,我正在使用 ksh。我只想替换 name=ENV1,因为我必须列出 name[0], name[1] 而不是一一声明。

标签: arrays unix variables ksh


【解决方案1】:

name=ENV1 不会将变量ENV1 的内容分配给变量name,而是实际的字符串ENV1

  • 要将数组ENV1 复制到name,您可以使用:

    name=$ENV1

    这与name=${ENV1[0]} 相同。数组的第一个元素 变量将被复制,因为未指定索引。所以在这里, 只考虑索引 0。

  • 要将ENV1 的所有值分配给name,您应该使用这个:

    set -A name "${ENV1[@]}"

    这会将数组变量name 设置为ENV1 的所有元素。

【讨论】:

  • 感谢 amartine,在 if 和 else 部分都得到了 'echo "${name[1]}"' 的空白行。请指教。
  • 您是否在代码中使用了set -A name "${ENV1[@]}",而不是name=ENV1?如果是这样,请告诉我您的更新代码。
  • 嗨 amartine,它可以工作,但是当我在调试模式下运行脚本时(sh -x name.sh)然后显示错误并中止。 错误: name.sh: line 55: set: -A: invalid option set: usage: set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
  • 您好,您应该使用ksh -x name.ksh 运行它。 sh 不支持数组。
猜你喜欢
  • 2013-05-16
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 2021-12-11
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 2019-05-31
相关资源
最近更新 更多