【发布时间】:2023-03-23 10:37:01
【问题描述】:
在我从另一个程序员那里得到的一个 bash 脚本中,有些行的长度超过了 80 列。为了表明该行在下一行继续,要添加到该行中的字符或事物是什么?
【问题讨论】:
标签: bash
在我从另一个程序员那里得到的一个 bash 脚本中,有些行的长度超过了 80 列。为了表明该行在下一行继续,要添加到该行中的字符或事物是什么?
【问题讨论】:
标签: bash
【讨论】:
^M 吐出一个错误。问题似乎是脚本是由使用 Windows 的人给我的。一个快速的dos2unix 修复了它:)
\ 完成这项工作。 @Guillaume 的回答和@George 的评论清楚地回答了这个问题。这里我解释了为什么The backslash has to be the very last character before the end of line character.考虑这个命令:
如果\后面有空格,则行续行无效。原因是\ 删除了下一个字符的特殊含义,即空格而不是不可见的换行符。在此示例中,换行符位于空格后面,而不是 \。
【讨论】:
通常,您可以在行尾使用反斜杠,以便命令继续到下一行。但是,在某些情况下,命令会隐式继续,即当行以令牌结尾时,不能合法地终止命令。在这种情况下,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
【讨论】:
[[-]] 条件下的某些情况下,我可以将反斜杠去掉,但在其他情况下则不行,我正在尝试找出规则。