簡體   English   中英

在Linux上用“ echo -e”代替命令echo

[英]Substituting command echo with “echo -e” on linux

我有一個shell程序,其內容如下

!#/bin/bash

echo \\n program

一旦我在Linux以外的平台上運行該程序,它就會識別特殊字符並將輸出顯示為

(newline)
program

當同一程序在Linux上運行時,echo命令需要使用“ -e”選項。 現在,我不想在文件中用“ echo -e”顯式更改每次出現的回聲,因為這將開始在其他平台上引起問題。 所以我想做一個條件編譯

set SYSTEM="uname -s"

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

但這是行不通的,因為使用set或export命令,我需要用$ echo替換所有出現的echo,但我不想這樣做。 再次設置別名不能解決此問題,因為即使在子外殼中,我也需要將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

相信您正在尋找別名。

bash中的語法為alias echo='echo -e';

我知道您不想更改echo調用,但是您如何考慮使用echo $'\\nhello\\n'代替echo -e

在您的shell中定義一個別名:

alias echo="echo -e";

然后獲取您的腳本:

source ./<script1>

這樣,您的腳本將不會創建子外殼並使用父外殼的變量。 同樣,即使在腳本終止后,您在腳本中定義的變量也將存在。

要在script1.sh中調用其他腳本,請使用source:

source ./<script2>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM