7

バッシュコード:

yellow="\e[1;33m"
chosen_colour="${yellow}"
declare -i score=300
printf '%s %d\n' "${chosen_colour}" "${score}"

結果:

\e[1;33m 300

次のようにする必要があります。

300 /* in yellow */

これらの構文のいずれも使用せずに、ANSI エスケープ シーケンスを含む文字列値を printf ステートメントに挿入するにはどうすればよいですか。

回避 1: (実際には動作しますが、多くの+=s を実行すると無駄になります)

s="${yellow}"
s+="${score}"
s+=...
s+=...
s+=...
s+=...
s+=...
s+=...
s+=...
s+=...

回避 2: (この構成を必要とする変数の数が非常に多いため、私の場合は実行が困難です)

printf "${yellow}${score}${a1}${a2}${a3}${a4}${a5}${a6}${a7}${a8}........."

最初の例で素朴に行っているように、呼び出しの引数部分を使用して、定義済みの FORMAT 文字列に従って、置換する値を渡すことができるようにしたいと考えています。printf

私はこのようなものと一緒に暮らすことができます:

printf \
  '%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s...' \
    "${a1}" \
    "${a2}" \
    "${a3}" \
    "${a4}" \
    "${a5}" \
    "${a6}" \
    ...

ただし、最終的には、多くの変数に対して、次のような構成を使用します。

${!a*} # or similar
4

1 に答える 1

4

あなたがやる:

printf "^[%s foo" "${a1}" # that is ctrl+v, ESC, followed by %s

また:

printf "\033%s foo" "${a1}"  # 033 octal for ESC
于 2013-03-01T02:03:34.463 に答える