![Bash 및 sh에서 코드 printf의 호환성 문제를 해결하는 방법은 무엇입니까?](https://linux55.com/image/165709/Bash%20%EB%B0%8F%20sh%EC%97%90%EC%84%9C%20%EC%BD%94%EB%93%9C%20printf%EC%9D%98%20%ED%98%B8%ED%99%98%EC%84%B1%20%EB%AC%B8%EC%A0%9C%EB%A5%BC%20%ED%95%B4%EA%B2%B0%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
저는 컬러 라인이 포함된 기본 스크립트를 작성했습니다.
#!/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"