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"

관련 정보