在 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"
在 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"