在外壳中使用转义字符



在阅读有关 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"

最新更新