Я новичок в написании bash-скриптов. Этот вопрос, вероятно, очень простой, но я пока не смог найти четкого ответа. Я работаю над установкой подсистемы Ubuntu в Windows 10.
Я запускаю скрипт, который содержит следующее условие:
if [ -z "$date1" ]; then
date1=$(head -n 1 "$dir"/*.txt | sed "s/^[^0-9]*//g" | date +%Y%m%d -f - 2>/dev/null)
fi
У него возникают проблемы, когда он сталкивается с каталогом (переменная dir
), в котором нет файла .txt, но я не совсем понимаю природу проблемы. Я знаю, что проблема в команде head
, по крайней мере частично. Я не получаю ошибку, сценарий просто останавливается, когда достигает каталога без файла .txt. Я хочу, чтобы сценарий просто двигался дальше. Если я запускаю строку отдельно (без условного выражения) в терминале, я получаю ошибку No such file or directory
, что имеет смысл. Что меня действительно смущает, так это то, что если я помещаю кавычки (одинарные или двойные) вокруг части подстановочного знака (например, '*.txt'
), то скрипт выдает ошибку head
и движется дальше. Мое ограниченное и, возможно, неправильное понимание состоит в том, что кавычки в данном случае означают, что программа больше не рассматривает *
как подстановочный знак и просто ищет файл с буквальным именем *.txt
. Но я думал, что когда bash интерпретирует *
, он сначала ищет любое возможное расширение, а затем пробует буквальную интерпретацию, если не находит ничего. Так почему же скрипт зависает в одном случае, а не в другом. Разве оба не должны просто выдавать ту же ошибку No such file or directory
, что и при запуске вне сценария?
Я также упомяну, что сценарий включает в себя предыдущие условия, которые сначала ищут файлы .docx и переходят к файлам .txt только тогда, когда файлов .docx нет. Он отлично справляется со случаями, когда файлы .docx отсутствуют, хотя первая команда в этом канале — unzip
, а не head
. Этот вопрос кажется актуальным, но поскольку скрипт может двигаться дальше когда вокруг подстановочного знака есть кавычки, и поскольку он движется по аналогичному сценарию, где нет файлов .docx, я хотел понять, в чем здесь проблема, и как ее исправить.
Я ценю вашу помощь.
shopt nullglob
. - person user1934428   schedule 03.03.2021