Как я могу реструктурировать эту строку кода Bash, чтобы я мог комментировать каждую инструкцию?

259
rivanov

У меня есть строка 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, что сбивает меня с толку. Любой вклад приветствуется.

3

2 ответа на вопрос

3
MaxP

You could use quite the syntax you want, but for the first line. If you write

SAMPLE= 

Then variable SAMPLE is set to the empty string. But if you write

SAMPLE=$( 

Then the interpreter looks for the closing parenthesis to end the statement. That is, you can write:

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

(BTW, you can nest $() to avoid the older backquote syntax.)

Это проницательно. Итак, «сделано» должно быть на своей линии? rivanov 8 лет назад 0
done может быть один на строке или разделен знаком ';' из предыдущей команды. MaxP 8 лет назад 0
1
td512

You need to do this:

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

This works because a comment ends at the newline \ and parses the command at the beginning of the next line

Хм ... так что \ не будет рассматриваться как часть комментария? Здесь (http://superuser.com/questions/641952/how-can-i-add-a-comment-for-each-flag-on-separate-lines-in-a-bash-script) ФП говорит, что он не могу этого сделать. rivanov 8 лет назад 0
@rivanov комментарий должен быть помещен перед экранированием новой строки для его оценки. Ошибка, которую вы связали, заключалась в том, что комментарий был оценен после новой строки, и вся строка была аннулирована как комментарий. td512 8 лет назад 0