Unix中的echo默认参数是什么?

3

在我的脚本中,我几乎总是使用转义序列来表示颜色:

R='\e[0m'
g='\e[0;32m'
echo -e "${g}green text${R}"

我希望将-e设置为默认行为,这样我就可以省略它。如何做到?

2个回答

5

您可以设置一个别名

alias echo='echo -e'
启用此功能后,您可以省略-e参数:
echo "${g}green text${R}"

1
差点就要说了 ;) - mtk
如果需要禁用转义序列,则可以使用-E覆盖默认设置。 - dmedvinsky
除非您设置 shopt -s expand_aliases,否则此示例无法在脚本中运行,但除此之外它是一个可工作的示例,谢谢。 - user1472229

0
通常情况下,您可以使用别名来实现这一点,并且它适用于许多 shell。但是 bash 别名在非交互式 shell 中不会被扩展,而您希望它用于脚本,这些脚本是非交互式的。
引用 man bash:
对于几乎每个目的,别名都被 shell 函数取代了。
因此,您可以使用函数,但我会给它起一个不同的名称,以避免错误或无限递归。
myecho()
{
    echo -e "$@"
}

如果你正在使用它,你可以做得更好:

green_echo()
{
    echo -e "${g}$@${R}"
}

甚至更好的是,您可以将颜色作为第一个参数获取,从$@中移除它,并使用switch选择正确的转义序列。没有限制,记住shell是一种完整的编程语言。

@Maxime:我刚刚测试了一个带有 #!/bin/bashalias foo=echofoo bar 的脚本,结果提示 line 3: foo: command not found。我猜你可以使用 shell 选项 expand_aliases,但这可能不是一个好主意…… - rodrigo
1
对我来说,它可以使用 /bin/sh,但无法使用 /bin/bash。尝试更改你的 shebang? - Maxime Chéramy
@Maxime:哦,对了。因此,某些 shell(在我的系统中是 sh -> dash)会在脚本中扩展别名,而某些 shell(bash)则不会。我已更新了我的答案。无论如何,我想知道这种差异的原因... - rodrigo
其实那样更糟。Bash会解释shebang并根据它是/bin/sh还是/bin/bash来改变其行为。我尝试将链接/bin/sh更改为指向/bin/bash,但结果相同。 - Maxime Chéramy
@Maxime:是的,那是 POSIX 模式,为了与历史 shell 兼容。你也可以使用 #!/bin/bash --posix 来获取它。 - rodrigo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接