“echo”通过 sh 和 bash 输出不同的答案

问题描述 投票:0回答:1

我使用三种方式运行我的脚本,但输出不同,你能向我解释一下为什么它会这样工作吗?谢谢!! 这是我的脚本

#!/bin/bash
#Program:
#     This program shows "Hello World!" in your screen.
echo -e "Hello World! \a\n" 
exit 0

如果我通过 bash 和 ./ 运行它,就像 bash sh01.sh 输出是

世界你好!

但是,如果我使用 sh 像 sh sh01.sh 那样,那就是

-e 世界你好!

还有一些其他信息

  1. 操作系统:Ubuntu 16.04.3
  2. 输入 sh -> 破折号
linux bash shell echo dash-shell
1个回答
3
投票

echo
不太可移植(即使是 Bash 的
echo
在不同的操作系统上也可能有不同的行为,这些操作系统在编译 Bash 时可能使用不同的默认选项)。您可以使用
printf
。根据posix

不可能在所有 POSIX 系统中可移植地使用

echo
,除非同时省略
-n
(作为第一个参数)和转义序列。
printf
实用程序可移植地用于模拟
echo
实用程序的任何传统行为 [...]


我的 bashrc 中有这个

_echo()

#
# _echo [-n] args...
#
function _echo()
{
    local eol='\n'

    if [[ $1 == '-n' ]]; then
        eol=''
        shift
    fi
    if [[ $1 == '--' ]]; then
        shift
    fi

    printf "%s$eol" "$*"
}
© www.soinside.com 2019 - 2024. All rights reserved.