カラーコードがあるときにprintfと%sをどのように使用しますか?

カラーコードがあるときにprintfと%sをどのように使用しますか?

次の行があります。

if [[ $# -eq 0 ]]; then
  printf "$fail_color Error - Function: $function, Line: $line_number \n"
  printf "do_test: Third parameter missing - expected result\n"
  exit 1
fi

これはうまく機能し、期待される結果を提供しますError - Function: words, Line: 94

その後、ShellCheckを使用し、推奨しました。

printf "$fail_color Error - Function: $function, Line: $line_number \n
             ^––SC2059 Don't use variables in the printf format string. Use printf "..%s.." "$foo".

だから変えてみました。

  printf "%s Error - Function: %s, Line: %s \n", "$fail_color", "$function", "$line_number"

ただし、出力にはカラーではなくカラーコードの詳細が表示されます。

\033[31;1m, Error - Function: words,, Line: 94 
,do_test: Third parameter missing - expected result

関連 - 複数の文字列に加えて文字列名を指定するより良い方法はありますか%s

詳細 - 色は次のように定義されます。

fail_color="\033[31;1m"
pass_color="\033[32;1m"
color_end="\033[0m"

ベストアンサー1

fail="\033[31;1m"
color_end="\033[0m"
func="foo"  # (renamed this variable to avoid confusion with function keyword)
line_number="42"

printf "%bError - Function: %s, Line: %d%b\n" "$fail" "$func" "$line_number" "$color_end"

出力:

エラー - 機能: foo, 行: 42

Ubuntu 11.04(bash 4.2.8(1)-リリース)、Ubuntu 14.04.1 LTS(bash 4.3.11(1)-リリース)、RHEL 5.1(bash 3.1.17(1)-リリース)、RHEL 6.0(bash)使用 4.1.2(1)-リリース)、RHEL 7.0(bash 4.3.11(1)-リリース)、Solaris 11(bash 4.1.9(1)-リリース)

おすすめ記事