【问题标题】:How to tell bash that the line continues on the next line如何告诉 bash 该行在下一行继续
【发布时间】:2023-03-23 10:37:01
【问题描述】:

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

【问题讨论】:

标签: bash


【解决方案1】:

字符是反斜杠\

来自bash manual

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

【讨论】:

  • 谢谢。 bash 脚本列中的通常限制是什么?
  • bash 没有有趣的列限制;为清楚起见,您应该尝试将每列限制为 70-80 个字符。
  • @RyanM 反斜杠必须是行尾字符之前的最后一个字符。您确定在 \ 之后没有任何空格吗?
  • @George 是的。稍微麻烦一点会用^M 吐出一个错误。问题似乎是脚本是由使用 Windows 的人给我的。一个快速的dos2unix 修复了它:)
  • @George 您的评论刚刚救了我,我在 \ 后面有一个空格,但我不知道出了什么问题。干杯!
【解决方案2】:

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

mysql -uroot\ -hlocalhost

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

【讨论】:

  • 感谢您指出“最后一个字符”部分。准确地跟踪这个错误让我有点沮丧。
【解决方案3】:

通常,您可以在行尾使用反斜杠,以便命令继续到下一行。但是,在某些情况下,命令会隐式继续,即当行以令牌结尾时,不能合法地终止命令。在这种情况下,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

【讨论】:

  • 是否有此类情况的正式列表,其中命令隐式继续到下一行?在我看来,在 [[-]] 条件下的某些情况下,我可以将反斜杠去掉,但在其他情况下则不行,我正在尝试找出规则。
猜你喜欢
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
  • 2010-10-08
  • 2015-01-29
相关资源
最近更新 更多