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