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