為什麼帶有選項 -e 的 echo 在命令列中與在 sh 腳本中的行為不同?

為什麼帶有選項 -e 的 echo 在命令列中與在 sh 腳本中的行為不同?

使用 LinuxMint 17.2,核心 4.4.0-97-generic。我製作了一個很小的 TestEcho.sh 腳本,其中包含:

#!/bin/bash
echo -e "\e[1;31m Text in Color \e[0m\n"
for code in {33..43}; do echo -e "\e[38;05;${code}m $code: Text in Color"; done ; echo "";

echo -e命令在命令列中執行時會給予預期的輸出。即它解釋轉義碼並以顏色顯示文字。

.sh 腳本中的相同命令echo似乎忽略該-e選項並顯示-e為文字文字。此外,for 循環似乎也被破壞了。這是由什麼引起的echo -e?更重要的是如何修復腳本?

回答(感謝 George Vasiliou):運行腳本bash而不是sh

$ bash ~/Download/TestEcho.sh

cmdline 中的 echo -e 與 sh 腳本中的 echo -e

答案1

bash 和 sh 是不同類型的 shell。 bash 是最新的並且比 sh 更聰明。在您的腳本中,您編寫的內容#!/bin/bash意味著它將使用bashshell 運行。但如果你使用的sh ~/Download/TestEcho.sh話它將使用shshell 運行。

相關內容