Я намагаюся встановити змінну в скрипті sh для останніх 3 символів базового імені файлу (під ім'ям бази я маю на увазі без шляху та без суфікса). Мені це вдалося зробити, але, з цікавості, мені цікаво, чи є коротша, єдина команда, яку я можу використовувати. Спочатку у мене був одноводковий awk
, але він був досить довгим. На даний момент у мене є цей дворядковий сценарій (якщо повна назва файлу є $1
):
filebase=`basename "$1"`
lastpart=`echo -n ${filebase%.*} | tail -c3`
Так, наприклад, "/path/to/somefile.txt" закінчується "ile" в $lastpart
.
Чи можу я якось комбінувати basename
і біт, щоб зняти суфікс в одну команду, і чи є спосіб надіслати його tail
(або щось інше, що я можу використовувати), не використовуючи трубу? Суфікс невідомий, тому я не можу базувати його як параметр basename
.
Основна мета насправді не стільки бути максимально короткою, скільки бути читабельною на перший погляд. Справжнім контекстом усього цього є це питання про Суперрусера , де я намагаюся знайти досить просту відповідь.
two
би; продовження на це було б .three
я здогадуюсь.
file.one.two.three
? Хочетеile
чиtwo
?