腳本test.sh內容:
在linuxmint上執行如下腳本總是出錯:
1
2
3
|
#!bin/sh
a=
"abcdefghijklmn"
echo
${a:2:7}
|
然后運行sh 1.sh總是報出bad substitutation
后來改成
1
2
3
|
#!bin/bash
a=
"abcdefghijklmn"
echo ${a:
2
:
7
}
|
然后執行 bash 1.sh 沒有問題。
原因是ubuntu的sh是連接指向dash的,而不是bash,自然在識別${a:2:7}總是出問題。
Linux中的shell有多種類型,其中最常用的幾種是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。三種shell各有優缺點。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。