Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中用变量声明变量_Bash_Variables_For Loop - Fatal编程技术网

在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