【问题标题】:Declaration of variable with variable in bash [duplicate]在bash中用变量声明变量[重复]
【发布时间】:2013-07-29 07:15:34
【问题描述】:
#!/bin/sh
b=( a b c d )
count=1
for a in ${b[@]}; do
    example_$count=$a  # how do I declare this variable "example_$count"
    echo example_$count; # and how do I echo it
    (( count++ ))
done

我需要的是这样的:

$example_1=a 
$example_2=b 
$example_3=c 
$example_4=d

【问题讨论】:

  • 为什么要这样做?为什么不只使用数组?例如,$example_1 将对应于 ${b[0]}

标签: bash variables for-loop


【解决方案1】:

要声明变量,请使用eval。对于显示变量,您有两种解决方案:eval,或 Bash 语法${!var}

所以你的脚本变成了,只有eval

#!/bin/bash
b=( a b c d )
count=1
for a in ${b[@]}; do
    var=example_$count
    eval $var=$a
    eval echo \$$var
    (( count++ ))
done

或者使用 Bash 语法进行显示:

#!/bin/bash
b=( a b c d )
count=1
for a in ${b[@]}; do
    var=example_$count
    eval $var=$a
    echo ${!var}
    (( count++ ))
done

【讨论】:

    【解决方案2】:

    最简单的解决方案:

    example=( a b c d )
    

    不要使用$example_1,而是使用${example[0]}。乍一看,这可能不像您想要的那样。但请记住,BASH 是一种有历史的脚本语言(= 它有很多很多的怪癖)。因此,虽然它并不完全符合您的想法,但在大多数情况下它会按您的预期工作。

    一个原因可能是您认为arrays should start with index of 1(这是初学者常见的错误,后来会导致很多问题)。但如果你坚持,你可以插入一个空的 0 元素来模拟所需的行为:

    example=( "" a b c d )
    

    如果你已经有了数组:

    example=( "" "${example[@]}" ) # prepend empty element to existing array
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 2014-09-04
      • 2018-11-23
      • 2013-07-15
      相关资源
      最近更新 更多