我有一个包含这样内容的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平台吗?
答案 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>