¿Cómo puedo reestructurar esta línea de código bash para poder comentar cada instrucción?

3

Tengo una línea de bash:

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

que intento dividir en varias líneas con el fin de comentar cada una de ellas. Me gustaría algo como lo siguiente, con comentarios en cada línea o después de la línea:

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

He visto tanto esto como esto , pero no tienen la $()evaluación o el bucle for, lo que me está desanimando. Cualquier aportación apreciada.

rivanov
fuente

Respuestas:

1

Usted necesita hacer ésto:

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

Esto funciona porque un comentario termina en la nueva línea \y analiza el comando al comienzo de la siguiente línea

td512
fuente
Hmm ... ¿entonces no sería tratado como parte del comentario? Aquí ( superuser.com/questions/641952/… ) el OP dice que no puede hacer esto.
rivanov
@rivanov el comentario tiene que ser puesto antes de la nueva línea de escape para que sea evaluado. El error que vinculó se debió a que el comentario se estaba evaluando después de la nueva línea, anulando toda la línea como un comentario
td512
3

Puede usar la sintaxis que desee, pero para la primera línea. Si tú escribes

SAMPLE=

Luego, la variable SAMPLE se establece en la cadena vacía. Pero si escribes

SAMPLE=$(

Luego, el intérprete busca el paréntesis de cierre para finalizar el enunciado. Es decir, puedes escribir:

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

(Por cierto, puede anidar $()para evitar la sintaxis de comillas anteriores más antigua).

MaxP
fuente
Eso es perspicaz. Entonces, ¿ donenecesita estar en su propia línea?
rivanov
done puede estar solo en una línea o separado por ';' del comando anterior.
MaxP