xargs 回显彩色输出

xargs echo colored output

我有以下命令:

somethingRegex | xargs -I {} sh -c 'echo -e "found \e[34m{}\e[39m";dummy {}'

echo 的颜色部分不起作用,示例输出:

-e found \e[34mresult\e[39m
dummy output
repeat

普通回声确实适用于 {} 是漂亮的蓝色

echo -e "found \e[34m{}\e[39m"

我该如何解决这个问题?

也许这是为了 Linux(尽管 OSX 通过颠倒 bashecho 的角色添加了一个有趣的转折)。

Linux的/bin/echo has a -e option which expands escapes of the sort you show, while some shells (such as dash, used in Debian) follow POSIX更紧密,不要这样做。 find 程序的行为就好像它在运行 /bin/sh,这可能不是您实际的 shell。 Debian 使用 dash 作为 /bin/sh.

同样,旧版本的 bash(我本地的 OSX 服务器有 3.2.53)不支持 -e 选项,而较新的版本(用 4.1 检查我本地的 Debian .5) 支持 -e 选项。

由于所有这些行为都是非标准的,通常的建议是使用 printf 实用程序,它也在 Linux 上提供非标准功能,但是您 需要足够便携:

somethingRegex | xargs -I {} sh -c 'printf "found 3[34m{}3[39m";dummy {}'