12

行以下は私8.9.混乱させます:

#!/bin/bash

a=foo
b=6
c=a
d="\e[33m"  # opening ansi color code for yellow text
e="\e[0m"   # ending ansi code
f=$d

printf "1. foo\n"
printf "2. $a\n"
printf "3. %s\n" "$a"
printf "4. %s\n" "${!c}"
printf "5. %${b}s\n" "$a"
printf "6. $d%s$e\n" "$a" # will be yellow
printf "7. $f%s$e\n" "$a" # will be yellow
printf '8. %s%s%s\n' "$d" "$a" "$e" # :(
printf "9. %s%s%s\n" "$f" "$a" "$e" # :(

%sカラー変数を展開してカラー スイッチを表示するために使用することはできますか?

出力:

1. foo
2. foo
3. foo
4. foo
5.    foo
6. foo
7. foo
8. \e[33mfoo\e[0m
9. \e[33mfoo\e[0m

6.そして7.実際に黄色です


編集

printf "10. %b%s%b\n" "$f" "$a" "$e" # :)

... 最後に!ジョシュのおかげで、それがそれを行うコマンドです!

4

1 に答える 1

19

引数のエスケープ文字を展開する書式指定子を探しています。便利なことに、bash は (からhelp printf) 以下をサポートします。

%b        expand backslash escape sequences in the corresponding argument

あるいは、bash はエスケープ文字の展開を実行する特別なメカニズムもサポートしています。

d=$'\e[33m'
于 2013-04-01T00:44:05.847 に答える