在bash中用变量声明变量
我需要的是这样的东西:在bash中用变量声明变量,bash,variables,for-loop,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 $e
#!/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[0]}
代替$example\u 1
。乍一看,这可能不是您想要的。但是请记住,BASH是一种有着悠久历史的脚本语言(它有很多很多怪癖)。所以,虽然它并不完全是你认为你需要的,但在大多数情况下,它会像你期望的那样工作
一个原因可能是你认为(这是一个初学者常见的错误,以后会导致很多问题)。但如果您坚持,可以插入一个空的0元素来模拟所需的行为:
example=( a b c d )
如果您已经拥有阵列,请执行以下操作:
example=( "" a b c d )
对于声明变量,可以使用
eval
。对于显示变量,有两种解决方案:eval
,或Bash语法${!var}
因此,您的脚本变为,仅使用eval
:
example=( "" "${example[@]}" ) # prepend empty element to existing array
或使用Bash语法进行显示:
#!/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
你为什么要这样做?为什么不直接使用数组呢?例如,
$example_1
将对应于${b[0]}
。
#!/bin/bash
b=( a b c d )
count=1
for a in ${b[@]}; do
var=example_$count
eval $var=$a
echo ${!var}
(( count++ ))
done