Я пытаюсь исправить мой первый скрипт bash, и в один момент имя файла передается в скрипт как $1
. Мне нужно извлечь имя файла без расширения.
В настоящее время я предполагаю, что все расширения состоят из трех букв, поэтому я удаляю последние 4 символа, чтобы получить имя файла:
a="${1:0:-4}"
Но мне нужно иметь возможность работать с расширениями, которые имеют более трех символов, как %~n1
в Windows.
Есть ли способ извлечь имя файла без расширения из аргументов?
Ответы:
Обычный способ сделать это в bash - использовать расширение параметров. (См. Справочную страницу bash и найдите «Расширение параметров».)
%
Указывает на то, что все соответствующие шаблону (следующий.*
) справа, используя самый короткий матч возможно, должен быть удален из параметра$1
. В этом случае вам не нужны двойные кавычки (") вокруг выражения.источник
${1%.*}
вернетсяSomething.eng
. Если вы хотите убрать все справа от первого,.
включая.
, используйте${1%%.*}
, который вернетсяSomething
.Если вы знаете расширение, вы можете использовать базовое имя
источник
Однострочник в Bash без использования базового имени :
источник