在 shell 中使用转义字符

Using escape characters in shell

在 shell 中阅读有关 Escape characters 的内容时,我尝试了一个示例 -

echo "The balance for user $USER is: $5:00"

它给出了输出

The balance for user me is: .00

但是当我尝试将转义字符 \ 与制表符 \t 或换行符 \n 一起使用时,它似乎不起作用。我尝试在双引号中使用它(转义字符在双引号中保留其含义)但它仍然不起作用。

echo "The balance for user $USER is:\t$5:00"

不给出输出

The balance for user me is: :00

相反,输出是 -

The balance for user vyadav is:\t:00

echo 命令不扩展 反斜杠转义 没有 -e 选项。

您可以使用 echo -e(请注意,这是 gnu 扩展 并且不是很便携):

echo -e "The balance for user $USER is:\t$5:00"
The balance for user anubhava is:   :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:   :00

$ 所做的与 \t 所做的有所不同。

shell 在看到 $ 时正在扩展双引号字符串中的变量,因此您需要 "escape" 来自 shell 的 $$ 就是这么做的)。您还可以使用不扩展变量的单引号。

另一方面,

\t 是 "backslash escape"(使用 echo 手册页使用的术语)。 \t(在双引号字符串中)与 shell 没有什么特别之处,因此它不会触及它。而且,默认情况下,echo 不处理 "backslash escapes"。你需要 -e 标志来打开它。

许多人认为带参数的 echo 是可憎的,不应该存在,使用 printf 可以很容易地避免使用 -e 标志(它确实处理数字"backslash escapes" 的格式字符串)。

因此 printf 版本将是(请注意格式字符串中缺少 $ 因为单引号)。

printf 'The balance for user %s is:\t:00' "$USER"