Perl 为什么是'\t';,从“返回”;背景勾选“;呼叫,扩展到制表器?所有字符都展开了什么?

Perl 为什么是'\t';,从“返回”;背景勾选“;呼叫,扩展到制表器?所有字符都展开了什么?,perl,bash,Perl,Bash,如果我运行这样一个简单的perl脚本(在linux上,使用bash) 我希望将打印\t,即反斜杠字符和“t”字符。事实上,如果我只是在bash中运行 echo '\t' 我看到了\t。但是,perl脚本打印制表器 为什么制表器在$res中展开?所有的角色都是这样展开的?而且,最重要的是,如何阻止它扩展?使用/bin/sh来计算反勾号,而不管您想使用什么shell,正是它将\t转换为选项卡。在sh内部运行echo'\t' 为了避免这种行为,请尝试在backticks中使用printf“%s\n”

如果我运行这样一个简单的perl脚本(在linux上,使用bash)

我希望将打印
\t
,即反斜杠字符和“t”字符。事实上,如果我只是在bash中运行

echo '\t'
我看到了
\t
。但是,perl脚本打印制表器


为什么制表器在
$res
中展开?所有的角色都是这样展开的?而且,最重要的是,如何阻止它扩展?

使用
/bin/sh
来计算反勾号,而不管您想使用什么shell,正是它将
\t
转换为选项卡。在
sh
内部运行
echo'\t'


为了避免这种行为,请尝试在backticks中使用
printf“%s\n”
而不是
echo

Oh!这是有道理的!谢谢。你发布的代码打印的是斜杠-t,不是标签。很有趣。它为我打印了一个标签。你是否真的运行了你发布的代码,因为你最初运行的代码没有编译。您的问题很可能是您在背景标记或
qq
中使用了
\t
,而不是在
q
中。或者可能命令是
echo\t
而不是
echo'\t'
。是的,我做了。又是现在。我知道它没有编译(结尾的反勾号,谢谢你注意到了这一点),因为我试图简化我的代码,但是如果我逐字运行问题中的版本,它仍然会打印一个制表器。我在GentooLinux(现在也是debian)上的bash中运行它。
perl-v
说我的perl版本是v5.10.1,如果这有帮助的话。
echo '\t'