我有一个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,这是我不想做的。同样,设置别名也不能解决这个问题,因为即使在subshell中,我也需要用"echo -e“替换echo。
对于Linux平台,有没有其他方法可以用"echo -e“来代替echo?
发布于 2013-04-06 04:11:28
结合使用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
发布于 2013-04-06 04:12:13
我相信你在找一个化名。
bash中语法应该是alias echo='echo -e';
发布于 2013-04-06 04:18:07
我知道您不想更改echo调用,但是您觉得用echo -e
代替echo $'\nhello\n'
怎么样?
https://stackoverflow.com/questions/15842614
复制相似问题