我想嵌入像这样的评论
ls -l \
-a \
# comment here
-h \
-t .
但似乎不可能。也许还存在其他一些变体?在反斜杠之后立即发表评论或以反斜杠结束评论无济于事。
答案 0 :(得分:3)
据我所知,这是不可能的,因为Bash试图遵循POSIX指南和其他标准。 特别是:
如果
<newline>
跟在反斜杠后面,那么shell应将其解释为行继续。在将输入拆分为令牌之前,应删除反斜杠和<newline>
s。由于转义<newline>
完全从输入中删除,并且未被任何空格替换,因此它不能用作令牌分隔符。
- Shell命令语言,2.2.1 Escape Character (Backslash)
因此,由于shell解析器的工作原理,它是不可能的:
#
开头的行是注释,评估后没有任何内容(包括尾随\
)\
一行在你的剧本中:
ls -l \
-a \
# comment here
-h \
-t .
注释行被替换为空(即没有令牌);并且由于该命令到目前为止是有效的,并且当满足换行符(… -a ↵
)时,shell运行ls -l -a
命令,然后运行-h -t .
命令(并且找不到-h
中的$PATH
二进制文件,因此它就会停在那里。)
答案 1 :(得分:2)
在那种情况下,我通常会选择
ls -l -a -h -t .
# | | | time sort
# | | human readable
# | all files
# long format
或者当它存在时我使用长形式的参数,例如--human-readable
而不是-h
。
答案 2 :(得分:2)
您可以使用数组执行类似的操作,但不需要连续符:
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
......但对于一般情况,答案是否定的。
答案 3 :(得分:1)
不直接,买可以将这些注释放入数组赋值中。 (这也允许您在不使用行继续的情况下将参数拆分为多行。)
cmd_options=(
-l
-a
# comment here
-h
-t .
)
ls "${cmd_options[@]}"
答案 4 :(得分:0)
我认为你不能直接这样做,因为注释删除是在反斜杠线连接之前完成的,所以这不起作用
# commenting \
seveal lines
显而易见的解决方案是在每一行使用#
:
# commenting
# seveal lines
如果你想要有创意,可以使用肮脏的技巧:
: 'This is almost
a multiline comment'
实际上不是评论,但除了将退出代码更改为0之外,它什么也没做。
答案 5 :(得分:0)
这是不可能的。因为反斜杠是一个行继续符,而注释是一个单独的字符,它使得右边的所有内容都被忽略,直到行尾:
ls \
# -l \
-h
将忽略-l
,执行ls
命令并将-h
视为新命令。
因为在类C语言中你有边界注释:/* */
可以将它们放在使用行继续的表达式中的标记之间。
答案 6 :(得分:0)
......它可以在管道之后完成:
echo "Hello beautiful" | \
# Display match only:
grep -o beautiful
但是,否则......不。
答案 7 :(得分:0)
以上帖子没有直接的解决方案。但是,甚至在更早的帖子中也提到了直接解决方案:How to put a line comment for a multi-line command和Commenting in a Bash script。
我最喜欢的解决方案是:
//in your html|js
function OnAppReady(){
console.log("### application is loaded")
}
您将需要带有重音符号(`)和八字形字体(#)的注释。在反斜杠前使用它们。