如何解决bash和sh中代码printf的兼容性问题?

如何解决bash和sh中代码printf的兼容性问题?

我编写了一个基本脚本,其中有彩色线条。

#!/bin/bash

g="\e[32m"
_0="\e[0m"

printf "$g name $_0"

该脚本正常运行,但在shellcheck.net我收到这条消息:Don't use variables in the printf format string

当我将脚本转换为#!/bin/sh脚本时,另一个问题无法正确运行,给出以下输出:

\e[32m name \e[0m

我用过echo -e,但这次sh说不-e支持。如何编写一行通用代码来解决这个问题?谢谢。

答案1

你可以使用它,在 bash 或 sh 上都可以工作:

#!/bin/bash

# \e not supported by POSIX; use \033 (octal) instead.
g=$(printf '\033[32m')
_0=$(printf '\033[0m')

printf '%s name %s foo' "$g" "$_0"

相关内容