尼玛,ubuntu默认dash不支持数据,搞了好久,按下面方便把系统默认shell改为bash就行。 #!/bin/sh declare -a name for i in `seq 100` do name[$i]=$i echo ${name[$i]} #为方便检查,加了打印 done
追问
都会报错
回答
同样是Ubuntu 10.10,不会报错。 书写时请注意空格,关键词for后面要有空格
追问
加了空格一样错
回答
我看了你下面的程序, 关键问题在于,你声明为了 #!/bin/sh,而sh环境是不能用 for((i=0; i<100; i++)) 这种不符合POSIX标准的语句的。只能用我的第二种方法。 for ... in ... 这种语句是支持的。或者用while循环,变量在循环中递增。
追问
#!/bin/sh for i in 1 2 3 do name[$i]=$i done name[1]=1:not found name[2]=1:not found name[3]=1:not found 说实话,从没接触过象shell这么渣的语言。一点规范都没
回答
for循环前加上这句试试: declare -a name 声明name为数组变量
追问
加不加都试过了,都错
回答
ubuntu中默认的shell是dash,是不支持数组的。 ls -l /bin/sh 可以看到sh是个指向dash的链接,所以你声明#!/bin/sh其实还是用的dash。 我忘记自己曾经配置过Ubuntu了。如下: ========================================= 怎么能把 dash 去掉而使用默认的 bash? 使用命令:sudo dpkg-reconfigure dash 此命令是对已安装的包进行重新配置,在菜单(dash-bash-sh.png)中选择是否将 sh 链接到 dash (Install dash as /bin/sh?) 选择否即可。具体请到百度文库中搜索“Ubuntu把默认的bash替换成了dash“,里面有一张图片说明。 还有另一种不太好看的办法,请百度搜索“Shell中模拟数组”。