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

Ope*_*way 85 bash

在我从另一个程序员那里得到的bash脚本中,有些行的长度超过了80列.为了表明该行在下一行继续,要添加到该行的字符或事物是什么?

Gui*_*ume 108

角色是反斜杠 \

bash手册:

反斜杠字符'\'可用于删除下一个字符读取和行继续的任何特殊含义.

  • @RyanM反斜杠必须是行尾字符前的最后一个字符.你确定你没有任何空格吗? (8认同)
  • @George是的.更麻烦的是用`^ M`吐出一个错误.问题似乎是脚本是由使用Windows的人给我的.快速`dos2unix`修复它:) (8认同)
  • @George你的评论只是拯救了我,我之后还有一个空格,我无法弄清楚出了什么问题.干杯! (2认同)

che*_*ner 28

通常,您可以在一行的末尾使用反斜杠,以便命令继续到下一行.但是,有些情况下命令是隐式继续的,即当行以令牌结束而不能合法地终止命令时.在这种情况下,shell知道会有更多内容,并且可以省略反斜杠.一些例子:

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

# Pipes
$ echo foo |
> cat
foo

# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar
Run Code Online (Sandbox Code Playgroud)

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

$ x="foo
> bar"
$ echo "$x"
foo
bar
Run Code Online (Sandbox Code Playgroud)

使用反斜杠,您再次将逻辑行拆分为多个逻辑行.

$ x="foo\
> bar"
$ echo "$x"
foobar
Run Code Online (Sandbox Code Playgroud)


Jin*_*Yao 14

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

   mysql -uroot \
   -hlocalhost      

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

  • 感谢您指出"最后一个角色"部分.我对跟踪这个错误感到有点沮丧. (2认同)