各命令についてコメントできるように、この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ループ。任意の入力をいただければ幸いです。

回答:


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

1行に1行にすることも、「;」で区切ることもできます。前のコマンドから。
MaxP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.