热搜词
发表于 2024-1-23 17:10:04 | 显示全部楼层 |阅读模式
sh执行脚本报错Syntax error: “(“ unexpected

问题:
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


全部评论0
回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|管理员之家 ( 苏ICP备2023053177号-2 )

GMT+8, 2024-12-21 22:52 , Processed in 0.154812 second(s), 22 queries .

Powered by Discuz! X3.5

Cpoyright © 2001-2024 Discuz! Team