我该如何重构这行 bash 代码以便可以对每条指令进行注释?

我该如何重构这行 bash 代码以便可以对每条指令进行注释?

我有一行 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 循环,这让我很困惑。任何意见都值得赞赏。

答案1

你需要这样做:

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

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

答案2

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

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)

(顺便说一句,您可以嵌套$()以避免使用较旧的反引号语法。)

相关内容