在shell中阅读Escape characters
时,我试了一个例子 -
echo"用户$ USER的余额为:\ $ 5:00"
它给出了输出
用户的余额为:$ 5.00
但是当我尝试使用带有标签\
或换行符\t
的转义字符\n
时,它似乎无法正常工作。我尝试在双引号中使用它(转义字符在双引号中保留其含义)但它仍然无效。
echo"用户$ USER的余额是:\ t \ $ 5:00"
没有提供输出
用户的余额为:$ 5:00
而输出是 -
用户vyadav的余额为:\ t $ 5:00
答案 0 :(得分:3)
echo
命令不会在没有-e
选项的情况下展开反斜杠转义。
您可以使用echo -e
(请注意,这是 gnu扩展程序,而且不是非常便携):
echo -e "The balance for user $USER is:\t\$5:00"
The balance for user anubhava is: $5:00
根据help echo
:
-e enable interpretation of the following backslash escapes
或者更好地使用printf
:
printf "The balance for user %s is:\t\$%s\n" "$USER" "5:00"
或
printf 'The balance for user %s is:\t$%s\n' "$USER" "5:00"
The balance for user anubhava is: $5:00
答案 1 :(得分:2)
\$
正在做什么和\t
正在做什么之间存在差异。
shell在看到$
时会在双引号字符串中扩展变量,因此您需要从shell中“转义”$
(这就是\$
正在做的事情)。您也可以使用不扩展变量的单引号。
\t
是“反斜杠转义”(使用echo
手册页使用的术语)。关于shell的\t
(双引号字符串)没有什么特别之处,因此它不会触及它。并且,默认情况下,echo不会处理“反斜杠转义”。您需要-e
标志才能启用它。
许多人认为带有参数的echo
是令人厌恶的,不应该存在,使用-e
代码可以轻松避免使用printf
(它可以处理多个“反斜杠转义为“格式字符串”。
因此printf
版本会是(请注意格式字符串中由于单引号而缺少\$
。)
printf 'The balance for user %s is:\t$5:00' "$USER"