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

2 ответа2

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)

(Кстати, вы можете вложить $() чтобы избежать более старого синтаксиса обратной цитаты.)

1

Вам нужно сделать это:

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

Это работает, потому что комментарий заканчивается на новой строке \ и анализирует команду в начале следующей строки

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .