Утилита basename
возвращает компонент имени файла пути. Если мы обработаем вашу строку как путь, она вернетstr5
:
string=str1/str2/str3/str4/str5
basename -- "$string"
Указанные выше выходные данные str5
. Это будет работать, даже если $string
содержит встроенные символы новой строки или начинается с-
:
string='-str1/str2/str3/str
4/str5'
basename -- "$string"
Сохранение результата basename
в переменной выполняется обычной подстановкой команд:
newstring=$( basename -- "$string" )
Но подстановка команды удаляет все конечные символы новой строки :тот, который выводится basename
в качестве разделителя строки, а также все те, которые оказались в конце из $string
.
Использование оператора ${var##pattern}
в оболочках POSIX позволит избежать этого (, а также сэкономит разветвление процесса и выполнение отдельной команды):
string='very/
strange
file name
'
newstring=${string##*/}
Но даст разные значения для $string
s, такие как /
или/some/dir/