linux shell腳本執行錯誤:bad substitution


腳本test.sh內容:

#!/bin/bash

read pressKey
indexes=0
c=${pressKey:indexes:1}
使用調試方式執行:sh -x test.sh第3行總出現bad substitution提示信息。
百思不得其解: 
於是百度,查到一條有用信息,這與linux shell使用的是/bin/sh,還是/bin/bash有關系。我的腳本中指定使用的是/bin/bash shell,但是我在調試的時候使用的是sh shell,因此調試時導致錯誤提示信息。
解決方法:
使用bash -x test.sh進行調試,則成功。
 
以下是引用的鏈接內容:
http://hi.baidu.com/wwkblog/item/c974569b9ee031aecd80e5fe

在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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM