Я пытаюсь установить переменную в скрипте 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
?