Здравствуйте.
Пытаюсь написать скрипт, который создаст в текущей папке папки с именами, полученными от какой-либо утилиты (в данном случае - ls):
$ ls -1 ~/test
abcd
dcba
test1
test1 test2
test1 test2 test3
, содержащие папку done.
Написал следующий скрипт:
for i in $(ls -1 ~/test) ; do
echo ${i}
if [ -d ~/test/$i ] ; then
echo "making ${i}/done dir"
mkdir -p ${i}/done
fi
done
Пока не смог понять, как обрабатывать в цикле имена, содержащие пробелы.
Если выполнить
for i in $(ls -1 ~/test) ; do
echo ${i}; done
abcd
dcba
test1
test1
test2
test1
test2
test3
Т.е., как я понял, баш интерпретирует пробелы в именах как разделители переменных.
Если выполнить
$ for i in "$(ls -1 ~/test)" ; do #добавил кавычки
echo ${i}; done
abcd dcba test1 test1 test2 test1 test2 test3
$ echo "${i}"
abcd
dcba
test1
test1 test2
test1 test2 test3
т.е. переменной i один раз присваивается вывод ls -1 ~/test, и выполнение
$ mkdir -p ${i}/done
приводит к
$ find -maxdepth 2 | sort
.
./abcd
./catalogue
./config
./dcba
./test1
./test2
./test3
./test3/done
Попробовал добавлять кавычки к именам папок:
DIRS=$(ls -1 ~/test | sed -r 's|^(.*)$|\"\1\"|g') ; for i in ${DIRS} ; do echo "${i}" ; done
"abcd"
"dcba"
"test1"
"test1
test2"
"test1
test2
test3"
Не работает.
Поможите, люди добрые!!