gpt4 book ai didi

linux - 在 Linux 上用 "echo -e"替换命令 echo

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:12 28 4
gpt4 key购买 nike

我有一个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,我不想这样做。再次设置别名并不能解决这个问题,因为即使在子 shell 中我也需要将 echo 替换为“echo -e”。

有没有其他方法可以仅在 Linux 平台上将 echo 替换为“echo -e”?

最佳答案

使用 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

关于linux - 在 Linux 上用 "echo -e"替换命令 echo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15842614/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com