在shell中使用转义字符

时间:2015-01-14 18:25:46

标签: regex shell

在shell中阅读Escape characters时,我试了一个例子 -

  

echo"用户$ USER的余额为:\ $ 5:00"

它给出了输出

  

用户的余额为:$ 5.00

但是当我尝试使用带有标签\或换行符\t的转义字符\n时,它似乎无法正常工作。我尝试在双引号中使用它(转义字符在双引号中保留其含义)但它仍然无效。

  

echo"用户$ USER的余额是:\ t \ $ 5:00"

没有提供输出

  

用户的余额为:$ 5:00

而输出是 -

  

用户vyadav的余额为:\ t $ 5:00

2 个答案:

答案 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"