sh执行脚本报错Syntax error: “(“ unexpected ​的两种解决办法

简介: ​sh执行脚本报错Syntax error: “(“ unexpected ​的两种解决办法

步留痕
​sh执行脚本报错Syntax error: “(“ unexpected ​的两种解决办法
sh执行脚本报错Syntax error: “(“ unexpected ​的两种解决办法

sh脚本中有数组初始化的内容

$ str="123 456 789"
$ array=($str)
$ echo ${array[2]}
sh执行脚本会报错Syntax error: "(" unexpected

--------------------------------------------------------第一种-----------------------------------------------------------

bash and dash

Bash是许多Linux平台的内定Shell,除bash外,还有许多传统UNIX上用的Shell,像tcsh、csh、ash、bsh、ksh等等。
GNU/Linux 操作系统中的 /bin/sh 本是 bash的符号链接,但鉴于 bash 过于复杂,有人把 bash 从 NetBSD 移植到 Linux 并更名为 dash 并将 /bin/sh 指向它,以获得更快的脚本执行速度。Dash Shell 比 Bash Shell 小的多,符合POSIX标准。
Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准。
要知道自己的/bin/sh指向何种解释器,可以用 ls /bin/sh -al 命令查看。
解决办法
修改默认的sh,可以采用命令sudo dpkg-reconfigure dash。在配置菜单中选no。
--------------------------------------------------------第二种------------------------------------------------------------------------

原因:
{spa.zzwjgk.com]
{spa.fb-town.com]
{spa.dianchi1.com]
{spa.snpbiz.com]
{spa.8fanmu.com]
{spa.6181111.com]
其他常见的linux发行版,虽然很多是将sh指向bash

debian/ubuntu上sh命令默认是指向dash,而不是bash

又因为dash是比bash还轻量的,只支持基本的shell功能,

其中不包括刚才那种数组初始化,所以才会识别不了,直接报Syntx error

解决:
解决办法是,直接用bash test.sh,或者./test.sh,这两种方式来执行脚本。

资料来源:https://blog.csdn.net/baidu_41617231/article/details/135748930

相关文章
|
Ubuntu Linux
在Linux中如何解压 .xz 和 tar.xz 文件?
【4月更文挑战第17天】
12009 6
在Linux中如何解压 .xz 和 tar.xz 文件?
|
缓存
银河麒麟server-V10配置镜像源
银河麒麟server-V10配置镜像源
17350 1
|
负载均衡 Ubuntu 应用服务中间件
|
Ubuntu Linux 编译器
openssl 的编译(linux、Ubuntu) 和 交叉编译(arm、Hi3531A)的问题分析、解决
openssl 的编译(linux、Ubuntu) 和 交叉编译(arm、Hi3531A)的问题分析、解决
2727 0
|
Ubuntu Linux 时序数据库
sudo apt-get update提示E: 仓库 “http://mirrors.aliyun.com/ubuntu eoan Release” 没有 Release 文件。亲试解决办法
将自己亲身解决这个办法进行分享,希望朋友们可以少走弯路。
10378 1
|
Linux 容器 Docker
Debian配置系统中文语言及环境
Debian配置系统中文语言及环境
13719 1
|
存储 关系型数据库 MySQL
1071 - Specified key was too long; max key length is 767 bytes
【2月更文挑战第5天】1071 - Specified key was too long; max key length is 767 bytes 问题处理
|
Ubuntu 虚拟化
Ubuntu安装VMtools实现与主机之间复制粘贴
一、安装 VMware Tools 右键点击你创建的系统,然后出现菜单下滑找到安装 VMware Tools(T) 这个点击安装; 右键点击你创建的系统,然后出现菜单下滑找到设置; 然后弹出虚拟机设置-->点击选项-->客户机隔离-->启用复制粘贴; 二、Ubuntu命令 这些命令假设你的Ubuntu系统已连接到互联网并且已配置为使用apt软件包管理器; 如果你的网络环境有限,你可能需要提前配置好网络或更换软件源; Ubuntu上安装和配置VMtools以实现与主机之间的文本复制粘贴功能; 1、打开终端(Terminal)。 2、运行以下命令以卸载旧版本的open-vm-tools: su
4421 1
|
Ubuntu 安全 网络协议