bash中带变量的变量声明

时间:2013-07-29 07:15:35

标签: bash variables for-loop

#!/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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

最简单的解决方案:

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