本文主要是介绍syntax error near unexpected token `(‘ 异常解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题的发现
写代码的肯定少不了和 shell 接触,今天执行一个 shell 脚本时发现报错了,报错内容如下:
syntax error near unexpected token `('
脚本内容排查了很多遍都没有找到原因,执行的方式为 sh xx.sh
然后使用 source xx.sh 执行和 bash xx.sh执行都是 ok 的。
知识的了解
此时就需要了解 sh source bash 执行文件的区别。


首先看两张图
source执行命令是直接执行命令,不创建子shellsh创建子shell。子shell里面的变量父shell无法使用,对环境变量的修改也不影响父shell,但是父shell里面的变量子shell可以使用。子shell执行完毕后,回到父shell,不会影响父shell原本的环境
看完,这些好像和我们使用 sh 命令执行的报错并没有什么关系。

通过 wihch 命令查看 sh 命令可以发现,sh 只是 bash 的软链接,那为什么和 bash 执行结果有区别呢?
bash执行时,如果$0是sh,则要求脚本内容遵循POSIX(Portable Operating System Interface of UNIX,缩写为 POSIX )规范,当不符合规范的语法存在时,则会报错。
所以当我们使用sh执行时,并不是一个程序,而是一种标准(POSIX),
这种标准,在一定程度上保证了脚本的跨系统性(跨UNIX系统)。
解决问题
找到了问题的原因,我们就可以解决了
如果你仍要使用 sh 的方式执行,那么请在代码的第一行加上
set +o posix
命令,这条命令会关闭使用 POSIX 规范的检测。
关注我,随时获取最新文章
这篇关于syntax error near unexpected token `(‘ 异常解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!