Wie kann ich diese Zeile des bash-Codes so umstrukturieren, dass ich zu jeder Anweisung einen Kommentar abgeben kann?

371
rivanov

Ich habe eine Zeile von bash:

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

Ich versuche, in mehrere Zeilen aufzuteilen, um jeden von ihnen zu kommentieren. Ich möchte etwas wie das Folgende, mit Kommentaren zu jeder Zeile oder nach der Zeile:

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

Ich habe sowohl das als auch das gesehen, aber sie haben weder die $()Bewertung noch die for-Schleife, die mich abwirft. Jede Eingabe wird geschätzt.

3

2 Antworten auf die Frage

3
MaxP

Sie können durchaus die gewünschte Syntax verwenden, außer für die erste Zeile. Wenn du schreibst

SAMPLE= 

Dann wird die Variable SAMPLE auf die leere Zeichenfolge gesetzt. Aber wenn du schreibst

SAMPLE=$( 

Dann sucht der Interpreter nach der schließenden Klammer, um die Anweisung zu beenden. Das heißt, Sie können schreiben:

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

(Übrigens, Sie können verschachtelt werden $(), um die ältere Backquote-Syntax zu vermeiden.)

Das ist aufschlussreich. "Done" muss also auf einer eigenen Linie stehen? rivanov vor 8 Jahren 0
done kann alleine in einer Zeile stehen oder durch ';' getrennt werden. vom vorherigen Befehl. MaxP vor 8 Jahren 0
1
td512

Sie müssen das tun:

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

Dies funktioniert, weil ein Kommentar an der Zeilenumbruch endet \und den Befehl am Anfang der nächsten Zeile analysiert

Hmm ... würde also nicht als Teil des Kommentars behandelt? Hier (http://superuser.com/questions/641952/how-can-i-add-a-comment-for-each-flag-on-separate-ines-in-a-bash-script) sagt er kann das nicht tun rivanov vor 8 Jahren 0
@rivanov der Kommentar muss vor dem Zeilenumbruch eingefügt werden, damit er ausgewertet werden kann. Der Fehler, den Sie verlinkt haben, war, dass der Kommentar nach dem Zeilenumbruch ausgewertet wurde und die gesamte Zeile als Kommentar aufgehoben wurde td512 vor 8 Jahren 0