当我在终端中运行cat \
时,它将返回换行符和提示
>
在这里我可以输入要打印的文件名。
Echo也会这样做,所以看起来像Unix。为什么会发生这种情况?从总体上讲,这对我有什么启示?
我已经阅读了相应的手册页,但看不到任何内容。 Googling向我展示了,由于shell解释而必须转义反斜杠,但不是那些shell解释。
答案 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