Bash数组:复合赋值失败

时间:2014-08-05 09:10:00

标签: arrays bash

我不知道为什么复合数组初始化对我不起作用。

最小例子:

#!/bin/bash
#
MINRADIUS=( 'foo' 'bar' 'foobar' )
for i in {0..2..1}; do echo ${MINRADIUS[$i]}; done

输出

$ sh test.sh
(foo bar foobar)

另外2个空白行。

场地初始化工作:

#!/bin/bash
#
MINRADIUS[0]="foo"
MINRADIUS[1]="bar"
MINRADIUS[2]="foobar"
for i in {0..2..1}; do echo ${MINRADIUS[$i]}; done

$ sh test.sh
foo
bar
foobar

我已经尝试了大括号,引号和“declare -a”的所有可能组合。

它可能与我的bash版本有关吗?我正在运行4.1.2(1)版。

3 个答案:

答案 0 :(得分:1)

问题是,你没有使用bash。如果您通过sh运行脚本,Shebang无关紧要。请改为bash

答案 1 :(得分:0)

我尝试了下面的代码,它对我来说很好。使用bash 3.2.39(1)-release

#!/bin/bash
#
MINRADIUS=( 'foo' 'bar' 'foobar' )
for i in {0,1,2}; do echo ${MINRADIUS[$i]}; done

这是

的输出
foo
bar
foobar

对我来说,你的代码是错误的

line 4: {0..1..2}: syntax error: operand expected (error token is "{0..1..2}")

答案 2 :(得分:0)

我怀疑你的第一个例子中使用复合赋值会引用一些引用。使用此修改过的测试脚本:

#!/bin/bash

echo "SHELL=${SHELL}"

echo 'Single-quoted v:'
v='(a b c)'; for i in {0..2}; do echo "v[$i]=${v[i]}"; done

echo 'Double-quoted v:'
v="(a b c)"; for i in {0..2}; do echo "v[$i]=${v[i]}"; done

echo 'Unquoted v:'
v=(a b c); for i in {0..2}; do echo "v[$i]=${v[i]}"; done

我得到以下输出:

$ sh test.sh
SHELL=/bin/bash
Single-quoted v:
v[0]=(a b c)
v[1]=
v[2]=
Double-quoted v:
v[0]=(a b c)
v[1]=
v[2]=
Unquoted v:
v[0]=a
v[1]=b
v[2]=c

如果引用赋值,它就变成了一个简单的变量赋值;一个简单的错误就是容易被忽视。