在阅读有关 shell 中Escape characters
的信息时,我尝试了一个例子 -
echo "用户$USER余额为:\$5:00"
它给出了输出
用户我的余额是: $5.00
但是当我尝试将转义字符与制表符
t
或换行符一起使用时n
,它似乎不起作用。我尝试在双引号中使用它(转义字符在双引号中保留其含义),但它仍然不起作用。
echo "用户$USER的余额为:\t\$5:00"
不给出输出
用户我的余额是: $5:00
相反,输出是——
用户 vyadav 的余额为:\t$5:00
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$%sn" "$USER" "5:00"
或
printf 'The balance for user %s is:t$%sn' "$USER" "5:00"
The balance for user anubhava is: $5:00
$
正在做的事情和t
正在做的事情是有区别的。
当 shell 看到$
时,它会扩展双引号字符串中的变量,因此您需要从 shell 中"转义"$
(这就是 $
正在做的事情)。您还可以使用不扩展变量的单引号。
另一方面,t
是"反斜杠转义"(使用echo
手册页使用的术语)。t
(在双引号字符串中)到 shell 并没有什么特别之处,因此它不会碰到它。而且,默认情况下,echo 不处理"反斜杠转义"。您需要 -e
标志才能打开它。
许多人认为带有参数的echo
是可憎的,不应该存在,并且使用 -e
标志很容易通过使用 printf
来避免使用(它确实在其格式字符串中处理了许多"反斜杠转义")。
因此,printf
版本将是(请注意,由于单引号,格式字符串中缺少$
)。
printf 'The balance for user %s is:t$5:00' "$USER"