脚本内容以下:linux
#!/bin/sh string="This is a string!" echo ${string:1:4}
添加可执行权限后报错bad substitution:shell
缘由分析:编程
这与linux shell使用的是/bin/sh,仍是/bin/bash有关系。 个人脚本中指定的是sh,ubuntu的sh是链接指向dash的,而不是bash,所以调试时致使错误提示信息。
解决方案:ubuntu
#!/bin/bash string="This is a string!" echo ${string:1:4}
拓展:bash
Linux中最经常使用的几种的shell是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。 Bourne shell是Unix最初使用的shell,而且在每种Unix上均可以使用。Bourne shell在shell编程方面至关优秀,但在处理与用户的交互方面作得不如其余几种shell。 Linux操做系统缺省的shell是Bourne Again shell,它是Bourne shell的扩展,简称Bash,与Bourne shell彻底向后兼容,而且在Bourne shell的基础上增长、加强了不少特性。Bash放在/bin/bash中,它有许多特点,能够提供如命令补全、命令编辑和命令历史表等功能,它还包含了不少C shell和Korn shell中的优势,有灵活和强大的编程接口,同时又有很友好的用户界面。 GNU/Linux 操做系统中的 /bin/sh 是 bash(Bourne-Again Shell)的符号连接,但鉴于bash过于复杂,有人把ash从NetBSD移植到Linux并改名为 dash(Debian Almquist Shell),并建议将/bin/sh指向它,以得到更快的脚本执行速度。Ubuntu号称自从他们在 6.10 版里这样作了之后,系统启动速度有了明显的提高。Debian 计划在下一个发行版(代号lenny)中也将 dash 做为默认的 /bin/sh。