解決 Bash 中的 bad substitution 錯誤
Yahya Irmak
2022年4月20日

變數替換可用於在 Bash 指令碼中操作變數的值。但是,此功能並非在每個 shell 中都可用。
本文將解釋如何解決 Linux Bash 中的 bad substitution
錯誤。
解決 Bash 中的 Bad Substitution
錯誤
我們可以通過使用變數替換從變數中獲取子字串來執行各種操作。讓我們檢查下面的示例 Bash 指令碼。
第一行稱為 shebang。它用於告訴作業系統使用哪個 shell 來解析檔案。
我們在第二行定義了一個名為 str
的字串變數。然後我們將 hello
和 world
子字串分配給單獨的變數。
它看起來像一個完全正確的程式碼。
#!/bin/sh
str="hello world"
hello=${str:0:5}
world=${str:6}
但是當我們執行這段程式碼時,我們得到一個 Bad substitution
錯誤。因為在 Ubuntu 中,/bin/sh
指向 dash shell。
不幸的是,dash shell 沒有變數替換功能。
你可以使用以下命令檢視 /bin/sh
指向哪個 shell。
which sh
ls -l /bin/sh
如你所見,/bin/sh
是指向 /bin/dash
的符號連結。要更改使用的 shell 並解決 bad substitution
錯誤,我們必須首先將第一行程式碼更改為 #!/bin/bash
。
因此,程式碼不再使用 dash 而是使用 bash 執行。
但是,你仍應避免在新增此語句後使用 sh file.sh
命令執行該檔案。如果你這樣做,#!/bin/bash
行將被忽略。
它僅在你直接執行指令碼時使用。
你可以使用 ./file.sh
或 bash file.sh
命令執行該檔案。你將不再收到此錯誤。
作者: Yahya Irmak
Yahya Irmak has experience in full stack technologies such as Java, Spring Boot, JavaScript, CSS, HTML.
LinkedIn