如何告诉bash该行在下一行继续


Answers:


127

字符是反斜杠 \

bash手册

反斜杠字符“ \”可用于删除下一个读取的字符以及换行的任何特殊含义。


谢谢。bash脚本的列中通常的限制是什么?
在2010年

bash没有有趣的列限制;为了清楚起见,您应该尝试将每列限制为70-80个字符。
哈比

9
@RyanM反斜杠必须是行字符末尾的最后一个字符。您确定\后面没有空格吗?
乔治,

9
@乔治是的。多摆弄一下会吐出一个错误^M。问题似乎是该脚本是由使用Windows的人提供给我的。快速dos2unix修复:)
RyanM

2
@George您的评论刚刚救了我,\后面有一个空格,我不知道出什么问题了。干杯!
2013年

36

通常,您可以在行尾使用反斜杠,以使命令继续到下一行。但是,在某些情况下,命令会隐式地继续执行,即当行以令牌结尾时,无法合法终止命令。在这种情况下,shell知道会有更多消息出现,因此可以省略反斜杠。一些例子:

# In general
$ echo "foo" \
> "bar"
foo bar

# Pipes
$ echo foo |
> cat
foo

# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar

引号内的隐式连续符是不同但相关的。在这种情况下,没有反斜杠,您只需在字符串中添加换行符即可。

$ x="foo
> bar"
$ echo "$x"
foo
bar

使用反斜杠,您再次将逻辑线拆分为多条逻辑线。

$ x="foo\
> bar"
$ echo "$x"
foobar

是否有这种情况的正式清单,其中命令隐式地延续到下一行?在我看来,在某些情况下,我可以在[[- ]]条件下省略反斜杠,但在其他情况下则不能,反而我想弄清楚规则。
Menachem '18

16

\做这份工作。@Guillaume的答案和@George的评论清楚地回答了这个问题。在这里,我解释了为什么The backslash has to be the very last character before the end of line character.考虑此命令:

   mysql -uroot \
   -h本地主机      

如果后面有空格\,则行继续将不起作用。原因是\ 删除了下一个字符的特殊含义,该字符不是空格,而是不可见的换行字符。\在此示例中,换行符不在空格之后。


2
感谢您指出“最后一个字符”部分。跟踪此错误使我有些沮丧。
杰森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.