腳本內容以下: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。