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

2 回答 2

1

For declaring variables, you use eval. For displaying variables, you have two solutions : eval, or Bash syntax ${!var}.

So your script becomes, with only 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

Or with Bash syntax for display :

#!/bin/bash
b=( a b c d )
count=1
for a in ${b[@]}; do
    var=example_$count
    eval $var=$a
    echo ${!var}
    (( count++ ))
done
于 2013-07-29T08:15:34.950 回答
0

最简单的解决方案:

example=( a b c d )

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

一个原因可能是您认为数组应该从索引 1 开始(这是初学者的常见错误,后来会导致很多问题)。但如果你坚持,你可以插入一个空的 0 元素来模拟所需的行为:

example=( "" a b c d )

如果你已经有数组:

example=( "" "${example[@]}" ) # prepend empty element to existing array
于 2013-07-29T07:52:33.457 回答