我想嵌入这样的评论。
但似乎这是不可能的。也许存在其他变体?在反斜杠后面添加注释或以反斜杠结束注释并不能帮助解决问题。
ls -l \
-a \
# comment here
-h \
-t .
但似乎这是不可能的。也许存在其他变体?在反斜杠后面添加注释或以反斜杠结束注释并不能帮助解决问题。
ls -l `# long format` \
-a `# all files` \
-h `# human readable` \
-t `# time sort`
因此,由于shell解析器的工作方式,这是不可能的:如果反斜杠后面跟着一个
<newline>
,则shell将把它解释为行续行符。在将输入分成标记之前,将删除反斜杠和<newline>
。由于转义的<newline>
完全从输入中删除,并且不被任何空格替换,因此它不能用作标记分隔符。
——Shell Command Language,2.2.1 Escape Character (Backslash)
#
开头的行是注释,不会评估后面的任何内容(包括尾随的\
)\
不是行跳过。ls -l \
-a \
# comment here
-h \
-t .
注释行被替换为空(即它没有令牌);由于目前命令是有效的,并且遇到换行符(… -a ↵
),shell运行ls -l -a
命令,然后运行-h -t .
命令(并且在您的$PATH
中找不到-h
二进制文件,因此停在那里。)
ls_cmd=(
ls
-l # long form
-a # show hidden files
-h # human-readable sizes
-t # sort by time
.
)
"${ls_cmd[@]}" # run the command from the array
对于一般情况而言,答案是否定的。
ls -l -a -h -t .
# | | | time sort
# | | human readable
# | all files
# long format
当存在长格式参数时,我会使用长格式参数,例如--human-readable
而不是-h
。
echo "Hello beautiful" | \
# Display match only:
grep -o beautiful
虽然不能直接实现,但你可以将这样的注释放在数组赋值语句中。(这还可以让你在不使用行继续符的情况下将参数分散到多行中。)
cmd_options=(
-l
-a
# comment here
-h
-t .
)
ls "${cmd_options[@]}"
我认为你不能直接这样做,因为在反斜杠行拼接之前已经完成了注释的删除,所以这样是不起作用的。
# commenting \
seveal lines
#
:# commenting
# seveal lines
如果你想要创意,你可以使用一个卑鄙的技巧:
: 'This is almost
a multiline comment'
实际上不是注释,只是什么也没做,除了将退出代码更改为0。
这是不可能的。因为反斜杠是一种行继续符,而注释只是一个单独的字符,这使得右侧的所有内容都被忽略直到行末:
ls \
# -l \
-h
-l
将被忽略,执行 ls
命令并将 -h
视为新命令。
因为在类 C 语言中,你可以使用边界注释:/* */
,所以可以在使用行续行的表达式中,在标记之间放置这些注释。