【发布时间】:2015-01-14 18:25:46
【问题描述】:
在 shell 中阅读 Escape characters 时,我尝试了一个示例 -
echo "用户 $USER 的余额为:\$5:00"
它给出了输出
用户 me 的余额为:$5.00
但是当我尝试将转义字符 \ 与制表符 \t 或换行符 \n 一起使用时,它似乎不起作用。我尝试在双引号中使用它(转义字符在双引号中保留其含义)但它仍然不起作用。
echo "用户 $USER 的余额为:\t\$5:00"
不给出输出
用户 me 的余额为:$5:00
相反,输出是 -
用户vyadav的余额为:\t$5:00
【问题讨论】:
-
“为什么它不起作用?” -- 因为 shell 从来没有也从来没有将
"\t"扩展成双引号内的制表符。 Bash 将在$'\t'样式引号内执行此操作,但它们是不同的。echo "\t"适用于具有符合 XSI 的echo命令的系统,因为echo命令——而不是 shell 解析/预处理——扩展了序列;对于具有 GNU 扩展的系统上的echo -e "\t"也是如此。 -
我不明白,
Shell扩展了什么以及命令echo是什么?~由Shell扩展,对吗?*等通配符也是如此。 -
是的,波浪号扩展和全局扩展都是由 shell 完成的。
echo支持的唯一扩展是反斜杠转义序列,即使这样也只有一些版本的 echo(这就是为什么最好使用printf,因为它的行为在版本之间是一致的)。请参阅 pubs.opengroup.org/onlinepubs/009604599/utilities/echo.html 的 OPERANDS 部分以获取符合 XSI 的echo将展开的反斜杠转义序列列表。