Вопрос по bash, shell, unix – Захватите имя файла в Unix из полного пути
4
ответа
Вbash
:
path=/this/is/could/be/any/path/abc.txt
Если в вашем пути есть пробелы, оберните его"
path="/this/is/could/be/any/path/a b c.txt"
Затем, чтобы извлечь путь, используйтефункция базового имени
file=$(basename "$path")
или же
file=${path##*/}
Он должен быть заключен в двойные кавычки, чтобы избежать проблем с забавными символами в имени файла:
file="$(basename $path)"
или жеfile="${path##*/}"
file=${path##*/}
будет работать вksh
также; фактически, bash позаимствовал эту функцию у ksh. любойsh
в любой системе Linux, скорее всего, это тоже поддержит.
Вы ответите хорошо, но если разработчик хочет, чтобы скрипт работал с путями, которые имеют пробел, первый ответ должен заключаться в кавычки вокруг $ path, поэтому: file = $ {basename & quot; $ path & quot;}. Я исправил ответ, чтобы исправить это, но я думаю, что он требует вашего одобрения. @ Кейт Томпсон, file = & quot; $ {basename $ path} & quot; не будет работать, кавычки должны быть в $ path, или функция basename не будет работать должным образом.
basename path
дает имя файла в конце пути
Редактировать:
Вероятно, стоит добавить, что распространенным шаблоном является использование обратных кавычек вокруг команд, например. `basename ...`, поэтому оболочки UNIX выполнят команду и вернут ее текстовое значение.
Чтобы присвоить результат basename переменной, используйте
x=`basename ...path...`
и $ x будет именем файла.
Я пробовал это, и базовое имя, кажется, падает на пути, где в имени есть пробел.