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 执行命令是直接执行命令,不创建子 shell
  • sh 创建子 shell。子 shell 里面的变量父 shell 无法使用,对环境变量的修改也不影响父 shell,但是父 shell 里面的变量子 shell 可以使用。子 shell 执行完毕后,回到父 shell,不会影响父 shell 原本的环境

看完,这些好像和我们使用 sh 命令执行的报错并没有什么关系。

在这里插入图片描述
通过 wihch 命令查看 sh 命令可以发现,sh 只是 bash 的软链接,那为什么和 bash 执行结果有区别呢?

bash 执行时,如果 $0sh ,则要求脚本内容遵循 POSIX (Portable Operating System Interface of UNIX,缩写为 POSIX )规范,当不符合规范的语法存在时,则会报错。
所以当我们使用 sh 执行时,并不是一个程序,而是一种标准(POSIX),
这种标准,在一定程度上保证了脚本的跨系统性(跨UNIX系统)。

解决问题

找到了问题的原因,我们就可以解决了
如果你仍要使用 sh 的方式执行,那么请在代码的第一行加上

set +o posix

命令,这条命令会关闭使用 POSIX 规范的检测。


关注我,随时获取最新文章

©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:上身试试 返回首页