在linux上用“echo -e”替换命令echo

时间:2013-04-05 20:07:56

标签: linux shell echo alias subshell

我有一个包含这样内容的shell程序

!#/bin/bash

echo \\n program

一旦我在Linux以外的平台上运行该程序,它就会识别特殊字符,并将输出显示为

(newline)
program

当在Linux上运行相同的程序时,echo命令需要“-e”选项。 现在我不想明确地在我的文件中使用“echo -e”更改每次出现的echo,因为这将开始在其他平台上创建问题。所以我想做一个像

这样的条件编译
set SYSTEM="uname -s"

#if ($SYSTEM == Linux)
set echo="echo -e"
#endif

但这不起作用,因为使用set或export命令,我需要用$ echo替换所有出现的echo,我不想这样做。 再次设置别名并不能解决这个问题,因为我需要将echo替换为“echo -e”,即使在子shell中也是如此。

还有其他方法可以用“echo -e”替换echo仅用于Linux平台吗?

4 个答案:

答案 0 :(得分:1)

使用BASH_ENV和我们可以执行的功能的组合:

bash-3.2$ export BASH_ENV=$HOME/always-source
bash-3.2$ cat $HOME/always-source 
echo() {
    command echo -e "$@"
}

bash-3.2$ cat runme.bash
#!/bin/bash

echo "\nHello World $1\n"

if [[ -z $1 ]]; then
    $0 child
fi

调用:

bash-3.2$ ./runme.bash 

Hello World 


Hello World child

在bash测试中包装它(linux& mac os x):

if [[ $(uname -s) = Linux ]] || [[ $(uname -s) = Darwin ]]; then
    export BASH_ENV=$HOME/always-source
fi

答案 1 :(得分:0)

我相信你正在寻找别名。

bash中的语法是 alias echo='echo -e';

答案 2 :(得分:0)

我知道您不想更改回音调用,但您如何考虑使用echo $'\nhello\n'代替echo -e

答案 3 :(得分:0)

在shell中定义别名:

alias echo="echo -e";

然后来源你的脚本:

source ./<script1>

通过执行此操作,您的脚本将不会创建子shell并使用父shell的变量。此外,即使在脚本终止后,您在脚本中定义的变量也将存在。

要在script1.sh中调用其他脚本,请使用source:

source ./<script2>