Чтобы удалить косую черту, если она есть, вы можете использовать конструкцию расширения параметра удаления суффикса, присутствующую во всех оболочках в стиле POSIX:
x=${x%/}
Есть несколько осложнений. Это удалит только одну косую черту, так что если вы начали с, a/b/c//
то вы все равно получите косую черту. Кроме того, если исходный путь был /
, вы должны сохранить косую черту. Вот более сложное решение, которое заботится об этих случаях:
case $x in
*[!/]*/) x=${x%"${x##*[!/]}"};;
*[/]) x="/";;
esac
Или в ksh или в bash после shopt -s extglob
:
[[ x = *[!/] ]] || x=${x%%*(/)}
Обратите внимание, что во многих случаях не имеет значения, что есть косая черта. Имеет значение, является ли аргумент символической ссылкой на каталог: с косой чертой аргумент обозначает каталог, тогда как без косой черты аргумент обозначает саму символическую ссылку. Это также имеет значение с несколькими другими программами, например, исходный аргумент rsync
трактуется по-разному в зависимости от наличия косой черты.
/
.