[英]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.