在POSIX shell的shell脚本中,哪些行延续有效,哪些行延续无效?

在POSIX shell的shell脚本中,哪些行延续有效,哪些行延续无效?,shell,posix,Shell,Posix,在下面的示例中,虽然我已将行if true&&true拆分为两行,但它工作正常并生成输出hi if true && true then echo hi fi 但是在下面的例子中,重定向操作符和文件名被分成两行,我得到了一个错误 wc -l < /var/log/messages wc-l< /var/log/messages 我得到的错误是 foo.sh: line 1: syntax error near unexpected token `newli

在下面的示例中,虽然我已将行
if true&&true
拆分为两行,但它工作正常并生成输出
hi

if true &&
   true
then
    echo hi
fi
但是在下面的例子中,重定向操作符和文件名被分成两行,我得到了一个错误

wc -l <
/var/log/messages
wc-l<
/var/log/messages
我得到的错误是

foo.sh: line 1: syntax error near unexpected token `newline'
foo.sh: line 1: `wc -l <'
foo.sh:第1行:意外标记“newline”附近的语法错误
foo.sh:第1行:`wc-l容易吗?也许不是

彻底地

特别是
和_IF
io_文件

%令牌和\u IF或\u IF DSEMI
/*      '&&'      '||'     ';;'    */
和_或:管道
|and_或and_(如果管线中断)
|和_或_,如果管线中断
命令:简单命令
|复合命令
|复合命令重定向列表
|函数定义
重定向\u列表:io\u重定向
|重定向\u列表io\u重定向
;
io_重定向:io_文件
|IO_编号IO_文件
|我在这儿
|IO_号码IO_在这里
;
io_文件:“”文件名
|GREATAND文件名
|DGREAT文件名
|LESSGREAT文件名
|重击文件名
;
文件名:WORD/*应用规则2*/
您希望在POSIX Shell命令语言文档()中搜索“控制运算符”

部分摘录:

“简单命令”是一系列可选的变量赋值和重定向,可以是任意顺序,后面可以是单词和重定向,由控制运算符终止

管道是由控制运算符“|”分隔的一个或多个命令的序列

AND-OR列表是由运算符“&&”和“| |”分隔的一个或多个管道的序列

列表是由一个或多个AND-or列表组成的序列,由运算符“;”分隔和&,并可选地以“;”、“&”结尾,或者

根据,可后跟
换行符的控制运算符为:

  • &&
    |
  • |
  • &

此外,for和while循环、if和case语句、函数定义以及子shell和分组构造中可以有大量的换行符。

容易吗?也许不是。彻底:特别是
和_IF
io_文件
%token  AND_IF    OR_IF    DSEMI
/*      '&&'      '||'     ';;'    */

and_or       :                         pipeline
             | and_or AND_IF linebreak pipeline
             | and_or OR_IF  linebreak pipeline

command         : simple_command
                | compound_command
                | compound_command redirect_list
                | function_definition
redirect_list   :               io_redirect
                | redirect_list io_redirect
                ;
io_redirect     :           io_file
                | IO_NUMBER io_file
                |           io_here
                | IO_NUMBER io_here
                ;
io_file         : '<'       filename
                | LESSAND   filename
                | '>'       filename
                | GREATAND  filename
                | DGREAT    filename
                | LESSGREAT filename
                | CLOBBER   filename
                ;
filename        : WORD                      /* Apply rule 2 */