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