Як витягти ім'я файлу без розширення з повного шляху?


9

Я намагаюся виправити свій перший скрипт bash, і в один момент ім'я файлу передається сценарію як $1. Мені потрібно витягти ім’я файлу без розширення.
Наразі я припускаю, що всі розширення - це три літери, тому я видаляю останні 4 символи, щоб отримати ім'я файлу:

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

Але мені потрібно вміти працювати з розширеннями, які містять більше трьох символів, як %~n1у Windows.
Чи є спосіб вилучити ім'я файлу без розширення з аргументів?


Відповіді:


23

Звичайний спосіб зробити це в bash - використовувати розширення параметрів. (Дивіться сторінку bash man і шукайте "Розширення параметрів".)

a=${1%.*}

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


Шаблони файлів зазвичай такі: "Something.eng.ext". Очевидно, що в цьому випадку ext - це розширення, але використання $ {1%. *} Поверне лише частину "Щось", правда?
користувач304822

1
Ні ${1%.*}повернеться Something.eng. Якщо ви хочете позбавити все праворуч від першого, .включаючи те ., використовуйте ${1%%.*}, що повернеться Something.
garyjohn

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.