Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将命令echo替换为";回声-e“;在linux上_Linux_Shell_Echo_Alias_Subshell - Fatal编程技术网

将命令echo替换为";回声-e“;在linux上

将命令echo替换为";回声-e“;在linux上,linux,shell,echo,alias,subshell,Linux,Shell,Echo,Alias,Subshell,我有一个shell程序,它的内容如下 !#/bin/bash echo \\n program 一旦我在Linux以外的平台上运行这个程序,它就会识别这个特殊字符,并以 (newline) program 当相同的程序在Linux上运行时,echo命令需要“-e”选项。 现在我不想在我的文件中显式地用“echo-e”更改每次出现的echo,因为这样会在其他平台上产生问题。所以我想做一个条件编译,比如 set SYSTEM="uname -s" #if ($SYSTEM == Linux)

我有一个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-e”替换echo

是否有其他方法可以仅在Linux平台上用“echo-e”替换echo?

结合使用以下功能:

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)中包装此测试:


我相信你在找一个化名

bash中的语法是
alias echo='echo-e'

我知道您不想更改echo调用,但是您如何考虑使用
echo$'\nhello\n'
而不是
echo-e

在shell中定义别名:

alias echo="echo -e";
然后为您的脚本编写源代码:

source ./<script1>
源代码/
这样,脚本就不会创建子shell并使用父shell的变量。此外,即使在脚本终止后,脚本中定义的变量也将存在

要调用script1.sh中的其他脚本,请使用源代码:

source ./<script2>
源代码/

您将此命令放在某个脚本中,并尝试在子shell中运行它,它将不起作用。通过将其添加到
.bashrc
中,它将在所有
bash
脚本中进行源代码转换。它将仅在新shell中进行源代码转换,而不是在子shell中进行源代码转换。我已将答案更改为使用
bash_ENV
和函数,而不是别名(在非交互式环境中似乎不起作用)切换到使用<代码> PROTFF <代码>可移植性吗?你有BASH脚本吗?或者你真的有一个SH脚本?如果你确定它总是BASH,ECHO是一个构建器,它可以被配置成在所有系统上工作相同的方式。如果它也可以由其他shell运行,请考虑WrkkKon的评论中的<代码> Prtff<代码>。nvoke other脚本再次使用echo命令。Thnx Upasna,我知道这一点,也知道其他一些方法,但我想用条件编译的方法来解决这个问题。@Manish但你不能把别名放在条件中吗?@trialent这不是别名,我在条件中使用set命令。它们应该是。子shell与其他任何子shell完全一样shell@gbtimmon…那么请尝试一下。
source ./<script2>