Разработчик(и) | Различные разработчики открытого и коммерческого ПО |
---|---|
Операционная система | Unix , Unix-подобный , IBM i |
Платформа | Кроссплатформенный |
Тип | Команда |
Лицензия | coreutils : GPLv3+ |
dirname
— стандартная компьютерная программа в Unix и Unix-подобных операционных системах . Если dirname
задано имя пути , она удалит любой суффикс, начинающийся с последнего '/'
символа косой черты ( ), и вернет результат. dirname
описана в Single UNIX Specification и в основном используется в скриптах оболочки .
Версия, dirname
входящая в состав GNU coreutils , была написана Дэвидом Маккензи и Джимом Мейерингом. [1] Команда доступна в виде отдельного пакета для Microsoft Windows как часть коллекции UnxUtils собственных портов Win32 распространенных утилит GNU Unix-like. [2] Команда dirname также была перенесена в операционную систему IBM i . [3]
Единая спецификация UNIXdirname
:
строка имени каталога
string
$ имя_каталога /home/martin/docs/base.wiki /home/martin/docs
$ dirname /home/martin/docs/. /home/martin/docs $ dirname /home/martin/docs/ /home/martin $ dirname base.wiki . $ dirname / /
Поскольку dirname
принимает только один операнд, его использование во внутреннем цикле сценариев оболочки может отрицательно сказаться на производительности. Рассмотрите
while read file ; do dirname " $file " done < some-input
Вышеприведенный фрагмент вызовет отдельный вызов процесса для каждой строки ввода. По этой причине обычно используется подстановка оболочки
echo " ${ file %/* } " ;
или если необходимо также обрабатывать относительные пути
если [ -n " ${ file ##*/* } " ] ; тогда echo "." иначе echo " ${ file %/* } " ; fi
Обратите внимание, что они обрабатывают завершающие слеши иначе, чем dirname.
Мы могли бы подумать, что пути, которые заканчиваются косой чертой, являются каталогом. Но на самом деле косая черта представляет все файлы в каталоге.
/home/martin/docs/.
Правильный способ представления пути в виде каталога — с завершающим слешем и точкой. [ по мнению кого? ] [ необходима цитата ]