Проблема с линией CURNT_JOB_STRIPED="$LINE | `awk -F ".tar" '{print $1}'`"
.
`command`
является устаревшим синтаксисом, вместо него следует использовать $(command)
.
$LINE
переменная должна быть напечатана, чтобы awk мог получить ее значение через канал.
Если вы запускаете все это в субоболочке ($(command)
), вы можете присвоить вывод переменной: var=$(date)
Безопаснее помещать переменные в ${}
, поэтому при наличии окружающего текста вы не получите неожиданных результатов.
Это должно работать:
CURNT_JOB_STRIPED=$(echo "${LINE}" | awk -F '.tar' '{print $1}')
С помощью подстановки переменных это может быть достигнуто с помощью более эффективного кода, а также, как мне кажется, его легко читать.
Подстановка переменной не приводит к изменению переменной ${LINE}
, поэтому ее можно использовать позже как переменную с полным именем файла без изменений, в то время как ${LINE%.tar*}
вырезает последний текст .tar
из значения переменной и с *
что-либо после что.
while read -r LINE; do
if [ ! -d "${QNAP}/${LINE%.tar*}" ]
then
echo "Folder ${QNAP}/${LINE%.tar*} doesn't exist."
#mkdir "${QNAP}/${LINE%.tar*}"
fi
done <"${LOG_DIR}/${NOVA_TAR_LIST}"
Таким образом, вы не сохраняете имя каталога как переменную, а ${LINE}
сохраняет только имя файла. Если вам это нужно в переменную, вы можете сделать это легко: var="${LINE%.tar*}"
Замена переменных:
Более того, я выбрал только эти 4, поскольку они похожи и актуальны здесь.
$ {var # pattern} - использовать значение var после удаления текста, соответствующего шаблону слева
$ {var ## pattern} - То же самое, что и выше, но вместо самого короткого удаляется самый длинный соответствующий элемент
$ {var% pattern} - использовать значение var после удаления текста, соответствующего шаблону справа
$ {var %% pattern} - То же самое, что и выше, но вместо самого короткого удаляется самый длинный соответствующий элемент