在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 */