如何重构这一行bash代码,以便我可以对每条指令进行评论?


3

我有一行bash:

SAMPLES=$(for f in `find $IN -iname *fastq.gz `; do basename $f | cut -c 1-4; done | sort | uniq)

我试图分成多行来评论每一行。我想要类似下面这样的内容,每行或在行后面有注释:

SAMPLES=
#comment
$(for f in `find $IN -iname *fastq.gz `; \ 
#comment
do basename $f |
#comment
cut -c 1-4; done | 
#comment
sort |
#comment
uniq)

我见过两者 这个 ,和 这个 ,但他们没有 $() 评价,或for循环,这让我失望。任何输入赞赏。

Answers:


1

你需要这样做:

SAMPLES=$(for f in `find $IN -iname *fastq.gz `; #comment \
do basename $f | #comment \
cut -c 1-4; done |  #comment \
sort | #comment \
uniq)

这是有效的,因为评论在换行符处结束 \ 并在下一行的开头解析命令


嗯...所以\不会被视为评论的一部分?这里( superuser.com/questions/641952/... OP说他不能这样做。
rivanov

@rivanov评论必须在换行符之前放置才能进行评估。您链接的错误是因为在换行符后评估了评论,将整行作为评论排除
td512

3

你可以使用你想要的语法,但是第一行。如果你写

SAMPLE=

然后将变量SAMPLE设置为空字符串。但如果你写

SAMPLE=$(

然后解释器查找右括号以结束语句。也就是说,你可以这样写:

SAMPLES=$(
#comment
for f in $(find . -name *fastq.gz) ;
#comment
do
# comment
basename $f |
#comment
cut -c 1-4
done |
#comment
sort |
uniq)

(顺便说一句,你可以窝 $() 避免旧的反引用语法。)


这很有见地。所以, done 需要独立吗?
rivanov

完成可以单独在一条线上,或用';'分隔来自上一个命令。
MaxP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.