sh执行shell脚本出现语法错误

今天调试一个脚本,用./的方式直接运行脚本没有发现任何问题,但是当我用如下命令打印调试信息的时候就会发现各种问题:

sh -x sample.sh

下面给出sample.sh

#!/bin/bash

hello(){
    echo "Hello, this is a function."
}

if [ ! -z $1 ] && [ $1 == '1' ] ; then
    hello
else
    echo "no argument."
fi

通过sh执行发现报如下错误:

sample.sh: 3: sample.sh: Syntax error: "(" unexpected
但是用./sample.sh方式执行却不会发生任何错误,也就是说脚本的自身执行是没有问题的,执行sh程序的时候才会有语法错误。

其实语法错误的原因在于两次执行的不是同一种shell,在用./sample的方式执行的时候,系统会使用脚本首行声明的/bin/bash来解释脚本,而用sh方式执行的时候,系统会调用sh这个程序,在我的机器上看一下sh这个程序的来源:

snow@snow-desktop:~$ ll `which sh`
lrwxrwxrwx 1 root root 4 11月  9 10:17 /bin/sh -> dash*

表明sh实际上是dash,和./sample.sh方式使用的并不是同一种shell,所以才会发生奇怪的语法错误。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值