树莓派 shell脚本执行提示错误[[: not found

2018-1-11 两寸土 服务器

测试脚本test.sh

#!/bin/bash
if [[ $# -eq 0 ]] ; then
    echo "Please enter some params"
    exit 0
fi

不退出vim执行

:!sh -x test.sh

提示

+ [[ 0 -eq 0 ]]
test.sh: 3: test.sh: [[: not found

Press ENTER or type command to continue

改为

:!bash -x test.sh

执行成功。
原因就是sh不支持[[这样的扩展,bash支持[[扩展。可以将脚本中的#! /bin/sh改成#! /bin/bash再#./myscript也是一样。

sh只是一个符号链接,最终指向是一个叫做dash的程序,自Ubuntu 6.10以后,系统的默认shell /bin/sh被改成了dash。dash(the Debian Almquist shell) 是一个比bash小很多但仍兼容POSIX标准的shell,它占用的磁盘空间更少,执行shell脚本比bash更快,依赖的库文件更少,当然,在功能上无法与bash相比。dash来自于NetBSD版本的Almquist Shell(ash)。

Ubuntu中将默认shell改为dash的主要原因是效率。由于Ubuntu启动过程中需要启动大量的shell脚本,为了优化启动速度和资源使用情况,Ubuntu做了这样的改动。

参考
[Linux shell脚本执行提示错误[: not found

发表评论 登录

Top