我不知道为什么复合数组初始化对我不起作用。
最小例子:
#!/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)版。
答案 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
如果引用赋值,它就变成了一个简单的变量赋值;一个简单的错误就是容易被忽视。