为什么cat \返回提示?

时间:2018-08-22 05:19:17

标签: bash unix terminal sh cat

当我在终端中运行cat \时,它将返回换行符和提示 > 在这里我可以输入要打印的文件名。

Echo也会这样做,所以看起来像Unix。为什么会发生这种情况?从总体上讲,这对我有什么启示?

我已经阅读了相应的手册页,但看不到任何内容。 Googling向我展示了,由于shell解释而必须转义反斜杠,但不是那些shell解释。

2 个答案:

答案 0 :(得分:4)

这是Shell语法。换行符前面的\(按Enter键)可换行:

来自man bash

  

不带引号的反斜杠(\)是转义字符。除了换行符,它保留了下一个字符的字面值。如果出现一对换行符,并且反斜杠本身未加引号,则该换行符将被视为换行符(即,它已从输入流中删除并被有效忽略)。

或在POSIX中:

  

不带反斜杠的反斜杠应保留以下字符的文字值,换行符除外。如果换行符在反斜杠之后,则外壳程序应将其解释为换行符。在将输入拆分为令牌之前,应删除反斜杠和换行符。由于转义的换行符已从输入中完全删除,并且没有被任何空格替换,因此它不能用作令牌分隔符。

这意味着输入命令行尚未完成,并且外壳程序继续在下一行中读取它,并显​​示>提示符。

顺便说一句,>可以通过PS2环境变量进行配置。试试:

$ PS2='(continue cmdline) ... '
$ cat \

PS2的行为也在POSIX中指定:

  

PS2       每次用户在交互式外壳中完成命令行之前输入换行符时,此变量的值均应进行参数扩展并写入标准错误。默认值为“>”

答案 1 :(得分:1)

反斜杠转义其后的字符,在这种情况下为换行符(按回车键时插入)。它使您可以将过长的行换成多行以提高可读性,例如

echo this is a very long sentence to be\
 printed to your terminal

相同
echo this is a very long sentence to be printed to your terminal