![为什么带选项 -e 的 echo 在命令行中与在 sh 脚本中的行为不同?](https://linux22.com/image/122494/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%B8%A6%E9%80%89%E9%A1%B9%20-e%20%E7%9A%84%20echo%20%E5%9C%A8%E5%91%BD%E4%BB%A4%E8%A1%8C%E4%B8%AD%E4%B8%8E%E5%9C%A8%20sh%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%9A%84%E8%A1%8C%E4%B8%BA%E4%B8%8D%E5%90%8C%EF%BC%9F.png)
使用 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
答案1
bash 和 sh 是不同类型的 shell。 bash 是最新的并且比 sh 更智能。在您的脚本中,您编写的内容#!/bin/bash
意味着它将使用bash
shell 运行。但如果你使用的sh ~/Download/TestEcho.sh
话它将使用sh
shell 运行。