syntax error near unexpected token `(‘ 异常解决

2024-02-09 15:38

本文主要是介绍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 规范的检测。


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

这篇关于syntax error near unexpected token `(‘ 异常解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/694613

相关文章

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe