`

ubuntu数组赋值报not found

阅读更多
尼玛,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中模拟数组”。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics