debian/ubuntu上sh命令默认是指向dash,而不是bash
Debian Almquist shell,缩写为dash,一种 Unix
shell,相容于POSIX标准。
它比 Bash 小,只需要较少的磁盘空间,但是它的对话性功能也较少。
它由 NetBSD版本的Almquist shell (ash)发展而来,
于1997年,由赫伯特·许(Herbert Xu)移植到Linux上,于2002年改名为 dash。
bash shell上初始化数组一个简单例子
$ str="123 456 789"
$ array=($str)
$ echo ${array[2]}
789
假如写成脚本test.sh:
#!/bin/bash
str="123 456 789"
array=($str)
echo ${array[2]}
在debian下直接用sh
test.sh命令执行,就会报错
提示如下:
$ sh -x test.sh
+ str=123 456 789
test.sh: 3: test.sh: Syntax error: "(" unexpected
一开始测试是直接copy到终端中运行,没报错,但一用sh来执行脚本,就报错
后来想到,虽然脚本指定了执行工具是/bin/bash,
但这更多是在chmod
+x test.sh后直接./tesh.sh这种方式,
才会去调用/bin/bash来解析脚本,
其他常见的linux发行版,虽然很多是将sh指向bash,
但是debian中不是,而是 sh => dash,
又因为dash是比bash还轻量的,只支持基本的shell功能,
其中不包括刚才那种数组初始化,所以才会识别不了,直接报Syntx error
解决办法是,直接用bash
test.sh,或者./test.sh,这两种方式来执行脚本。