首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在linux上将echo命令替换为"echo -e“

在linux上将echo命令替换为"echo -e“
EN

Stack Overflow用户
提问于 2013-04-06 04:07:56
回答 4查看 4.2K关注 0票数 0

我有一个shell程序,它的内容如下

代码语言:javascript
运行
复制
!#/bin/bash

echo \\n program

一旦我在Linux以外的平台上运行这个程序,它就会识别特殊字符,并给出如下输出

代码语言:javascript
运行
复制
(newline)
program

当相同的程序在Linux上运行时,echo命令需要"-e“选项。现在,我不想在我的文件中使用"echo -e“显式地更改每次出现的echo,因为这样会在其他平台上开始产生问题。所以我想做一个条件编译,比如

代码语言:javascript
运行
复制
set SYSTEM="uname -s"

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

但是这不起作用,因为使用set或export命令时,我需要用$echo替换所有出现的echo,这是我不想做的。同样,设置别名也不能解决这个问题,因为即使在subshell中,我也需要用"echo -e“替换echo。

对于Linux平台,有没有其他方法可以用"echo -e“来代替echo?

EN

回答 4

Stack Overflow用户

发布于 2013-04-06 04:11:28

结合使用BASH_ENV和一个函数,我们可以做到:

代码语言:javascript
运行
复制
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

和一个调用:

代码语言:javascript
运行
复制
bash-3.2$ ./runme.bash 

Hello World 


Hello World child

将其封装在bash测试中(linux和mac os x):

代码语言:javascript
运行
复制
if [[ $(uname -s) = Linux ]] || [[ $(uname -s) = Darwin ]]; then
    export BASH_ENV=$HOME/always-source
fi
票数 1
EN

Stack Overflow用户

发布于 2013-04-06 04:12:13

我相信你在找一个化名。

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

票数 0
EN

Stack Overflow用户

发布于 2013-04-06 04:18:07

我知道您不想更改echo调用,但是您觉得用echo -e代替echo $'\nhello\n'怎么样?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15842614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档