извлечь имя файла из полного имени файла - PullRequest
2 голосов
/ 12 октября 2011
#!/bin/bash
FILES=src/*.erl
shopt -s nullglob
for f in $FILES
do
  echo "Processing $f file..."
# ???
done

Как извлечь имя файла из полного пути?И что это значит - "pathfilename = $ {f%. *}"?

Ответы [ 2 ]

5 голосов
/ 12 октября 2011

Я просто скопирую вывод справки, так как в нем есть примеры и все.

~$ basename --help
Usage: basename NAME [SUFFIX]
  or:  basename OPTION
Print NAME with any leading directory components removed.
If specified, also remove a trailing SUFFIX.

      --help     display this help and exit
      --version  output version information and exit

Examples:
  basename /usr/bin/sort       Output "sort".
  basename include/stdio.h .h  Output "stdio".
2 голосов
/ 12 октября 2011

Обновление: я удалил свой ответ на первую часть, так как, по-видимому, я неправильно понял то, что спрашивали.

Синтаксис, который вы упомянули, pathfilename=${f%.*}, означает, что для pathfilename установлено значение $f, а самое короткое совпадение для .* удалено из конца строки. Это удалит расширение из имени файла. В руководстве bash этот синтаксис описывается следующим образом :

$ {параметр% слово}

$ {параметр %% слово}

Удалить соответствующий шаблон суффикса. Слово раскрывается для создания шаблона, как в раскрытии пути. Если шаблон соответствует завершающей части расширенного значения параметра, то результатом расширения является расширенное значение параметра с самым коротким совпадающим шаблоном (случай «%») или самым длинным совпадающим шаблоном (случай «%%») ) удалено. Если параметр равен @ или *, операция удаления шаблона применяется к каждому позиционному параметру по очереди, и расширение является результирующим списком. Если параметром является переменная массива, подписанная @ или *, операция удаления шаблона применяется по очереди к каждому члену массива, и расширение является результирующим списком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...