Думаю, проблема в том, что в
prmrp_*_${SOME_SAMPLES[@]}_S*_L00?_R1_001.fastq.gz
он не дублирует все выражение для каждого элемента массива, он просто вслепую вставляет элементы массива в середину, давая эквивалент этого:
prmrp_*_37 132 253 642 242 42_S*_L00?_R1_001.fastq.gz
... который представляет собой набор отдельных элементов (prmrp_*_37
в качестве подстановочного выражения, за которым следует 132
в виде простой строки, за которой следует 253
и т. Д.).AIUI вы хотите расширить содержимое массива, а затем для каждого элемента использовать выражение подстановочного знака, чтобы получить все соответствующие файлы.Лучший способ сделать это - использовать два цикла, один для расширения массива, а другой для поиска подходящих файлов:
for sample in "${SOME_SAMPLES[@]}"; do
for d in prmrp_*_"${sample}"_S*_L00?_R1_001.fastq.gz; do
...
Кстати, я бы также рекомендовал использовать имена переменных в нижнем или смешанном регистре (например, sample
выше), чтобы избежать возможных конфликтов со многими переменными всех заглавных букв со специальными значениями / функциями.Кроме того, я бы использовал расширение параметра для удаления суффикса имени файла (вместо sed
):
input_file1=${d%_L00?_R1_001.fastq.gz}
Кроме того, вы обычно должны ставить двойные кавычки вокруг ссылок на переменные (например, echo "${input_file1}"
вместоecho ${input_file1}
).(Назначения, такие как input_file1=${d...
, являются исключением, хотя двойные кавычки там не вредят; они просто не нужны.) Обратите внимание, что в приведенном выше цикле for
я поместил двойные кавычки вокруг массива и ссылок на переменные,но не вокруг подстановочных знаков;это означает, что оболочка будет расширять символы подстановки (как вы хотите), но не связываться с содержимым переменной.