Поток является расширением: Каталоги базовых скриптов ([: Discover: неожиданный оператор)
Когда я выполняю скрипт:
for item in *
do
if [ -d "$item" ]
then
echo "$item"
fi
done
It перечисляет папки, которые были автоматически собраны во время установки системы (Рабочий стол, Документы, Загрузки) или автоматической установки приложений (Dropbox), а затем моей (dosgames), вместо того, чтобы расположить их все вместе в алфавитном порядке (Рабочий стол, Документы, dosgames, Загрузки, Dropbox).
Почему он запускает две отдельные проверки, если проверяет общую характеристику (-d)?
Вывод:
Dokumenty
Dropbox
Muzyka
Obrazy
Pobrane
Publiczny
Pulpit
Szablony
Wideo
dosgames
learning_linux
new
tset
Я использую польскую версию, поэтому названия каталогов. Тем не менее, все они являются системными каталогами по умолчанию, если, конечно, нет (т.е. Dropbox, dosgames)
Оболочка сортирует их в соответствии с установленным языком . В частности, переменная LC_COLLATE
управляет сортировкой строк. В вашем случае он сортирует символы в верхнем регистре перед символами в нижнем регистре, как в локали POSIX
или C
(т.е. сортируется по значениям символов ascii).
$ mkdir Dokumenty dosgames Dropbox Muzyka learning_linux
$ LC_COLLATE=en_US.utf-8; echo */
Dokumenty/ dosgames/ Dropbox/ learning_linux/ Muzyka/
$ LC_COLLATE=C; echo */
Dokumenty/ Dropbox/ Muzyka/ dosgames/ learning_linux/