为什么带选项 -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 运行。

相关内容