unix回显默认参数

unix回显默认参数,unix,echo,Unix,Echo,在我的脚本中,我几乎总是对颜色使用转义序列: R='\e[0m' g='\e[0;32m' echo -e "${g}green text${R}" 我想将-e设置为默认行为,以便可以忽略它。如何设置?您可以设置: 激活后,您可以省略-e: echo "${g}green text${R}" 通常情况下,您会使用别名,它适用于许多shell。但是bash别名不会在非交互式shell中展开,您希望它用于非交互式脚本 引用man bash: 对于几乎所有用途,别名都被shell函数取代 因此,您

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

R='\e[0m'
g='\e[0;32m'
echo -e "${g}green text${R}"
我想将
-e
设置为默认行为,以便可以忽略它。如何设置?

您可以设置:

激活后,您可以省略
-e

echo "${g}green text${R}"
通常情况下,您会使用别名,它适用于许多shell。但是
bash
别名不会在非交互式shell中展开,您希望它用于非交互式脚本

引用man bash:

对于几乎所有用途,别名都被shell函数取代

因此,您可以使用函数,但我会以不同的方式调用它,以避免错误或无限递归:

myecho()
{
    echo -e "$@"
}
如果你能做到这一点,你可以做得更好:

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

或者更好的是,您可以将颜色作为第一个参数,将其从
$@
中移出,并使用开关选择正确的转义序列。没有限制,记住shell是一种完整的编程语言。

几乎就要说出来了;)如果需要禁用转义序列,您可以使用
-E
覆盖此默认值。除非您设置
shopt-s expand_别名,否则在脚本中这将不起作用,但除此之外,这是一个工作示例,thanks@Maxime:我刚刚用
#测试了一个脚本/bin/bash
别名foo=echo
foo-bar
,它说
第3行:foo:command not found
。我想您可以使用shell选项
expand_alias
,但这可能是个坏主意……对我来说,它与/bin/sh一起工作,与/bin/bash不一起工作。试着改变你的舞步?@Maxime:哦,对了。因此,一些shell(我的系统中的sh->dash)在脚本中扩展别名,而一些shell(bash)则没有。我已经更新了我的答案。不管怎么说,我想知道为什么会有这样的区别……事实上更糟。Bash解释shebang并更改其行为,无论它是/bin/sh还是/bin/Bash。我已经尝试将链接/bin/sh改为指向/bin/bash,我可以看到相同的结果。@Maxime:是的,这是POSIX模式,与历史shell兼容。您也可以通过
#获得它/bin/bash--posix
green_echo()
{
    echo -e "${g}$@${R}"
}