9

Я пытаюсь исправить свой первый скрипт bash, и в один момент имя файла передается в скрипт как $1 . Мне нужно извлечь имя файла без расширения.
В настоящее время я предполагаю, что все расширения состоят из трех букв, поэтому я удаляю последние 4 символа, чтобы получить имя файла:

a="${1:0:-4}"

Но мне нужно иметь возможность работать с расширениями, которые содержат более трех символов, например %~n1 в Windows.
Есть ли способ извлечь имя файла без расширения из аргументов?

2 ответа2

19

Обычный способ сделать это в bash - использовать расширение параметров. (См. Справочную страницу bash и найдите "Расширение параметров".)

a=${1%.*}

% Указывает, что все, что соответствует шаблону, следующему (.*) Справа, с использованием кратчайшего возможного соответствия, должно быть удалено из параметра $1 . В этом случае вам не нужны двойные кавычки (") вокруг выражения.

9

Если вы знаете расширение, вы можете использовать базовое имя

$ basename /home/jsmith/base.wiki .wiki
base

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .