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

もう1つの問題は、スクリプトを#!/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"

おすすめ記事