Требуется в bash-скрипте обработать все файлы по маске в заданной директории. Файлы имеют расширения .001, .002, .003 и тд, причем заранее их количество неизвестно. Известно базовое имя файла, до расширения. Проблема в том, что имя может содержать пробелы.
Пробовал такое:
for file in $DIR/$base.* ; do
...
done
Не работает: имя с пробелами разбивается на части. Двойные кавычки проблему не решают, поскольку перестает работать маска.
Хелп, плиз.
А>А>for file in "$DIR/$base".* ; do
А> ...
А>done
А>
кроме того в местах использования нужно квотить "$file"
Здравствуйте, Аноним, Вы писали:
А>Требуется в bash-скрипте обработать все файлы по маске в заданной директории. Файлы имеют расширения .001, .002, .003 и тд, причем заранее их количество неизвестно. Известно базовое имя файла, до расширения. Проблема в том, что имя может содержать пробелы.
А>Пробовал такое:
А>for file in $DIR/$base.* ; do
for file in "$DIR/$base".*; do
мини-доказательство, что это работает:
$ touch '1x x'
$ echo *'x x'
1x x
$ echo *'x y'
*x y
$ MASK='x x'
$ echo *$MASK
1x x x
$ echo *"$MASK"
1x x
Учтите, что в стандартном sh, и в bash, если не установлены опции типа failglob или noglob, будет как в последних двух строках, если по маске вообще ничего нет; так что лучше установить noglob перед этим for.
А>Не работает: имя с пробелами разбивается на части. Двойные кавычки проблему не решают, поскольку перестает работать маска.
Полностью в двойные кавычки и не надо было заключать.