问题:
sh脚本中有数组初始化的内容
$ str="123 456 789" $ array=($str) $ echo ${array[2]}
sh执行脚本会报错 Syntax error: "(" unexpected
原因:
其他常见的linux发行版,虽然很多是将sh指向bash
debian/ubuntu上sh命令默认是指向dash,而不是bash
又因为dash是比bash还轻量的,只支持基本的shell功能,
其中不包括刚才那种数组初始化,所以才会识别不了,直接报Syntx error
解决:
解决办法是,直接用 bash test.sh
,或者./test.sh
,这两种方式来执行脚本。
执行sh ./xxx.sh出现:“Syntax error: “(” unexpected”的解决方法
昨天更新了Virtualmin的系统识别部分,目的是让它能支持Debian系统下的一键安装和优化,代码修改了差不多,将VPS重新安装为Debian,通过sh ./virtualmin.sh执行代码就报“Syntax error: “(” unexpected”错误,通过bash ./virtualmin.sh执行就没问题。几经查找语法,没有问题,后来在网上找到问题原因:
代码对于标准bash而言没有错,因为Ubuntu/Debian为了加快开机速度,用dash代替了传统的bash,是dash在捣鬼,解决方法就是取消dash。
解决:
1) sudo dpkg-reconfigure dash 在选择项中选No,搞定了!
2)在root下面执行 dpkg-reconfigure dash, 选择 no
zxl@ubuntu:~/package$ su
Password:
root@ubuntu:/home/zxl/package# dpkg-reconfigure dash