У меня есть скрипт, который требует каталог в качестве одного аргумента. Я хочу поддержать две формы: один как
a/b/c
(без косой черты в конце) и другой как
a/b/c/
(косая черта в конце).
Мой вопрос: учитывая любую из двух форм, как я могу просто оставить первую форму без изменений и удалить последнюю косую черту второй формы, чтобы преобразовать ее в первую форму.
shell-script
filenames
string
Юлонг Ао
источник
источник
/
.rsync
.Ответы:
примет первый параметр скрипта и удалит косую черту, если он есть.
источник
Чтобы удалить косую черту, если она есть, вы можете использовать конструкцию расширения параметра удаления суффикса, присутствующую во всех оболочках в стиле POSIX:
Есть несколько осложнений. Это удалит только одну косую черту, так что если вы начали с,
a/b/c//
то вы все равно получите косую черту. Кроме того, если исходный путь был/
, вы должны сохранить косую черту. Вот более сложное решение, которое заботится об этих случаях:Или в ksh или в bash после
shopt -s extglob
:Обратите внимание, что во многих случаях не имеет значения, что есть косая черта. Имеет значение, является ли аргумент символической ссылкой на каталог: с косой чертой аргумент обозначает каталог, тогда как без косой черты аргумент обозначает саму символическую ссылку. Это также имеет значение с несколькими другими программами, например, исходный аргумент
rsync
трактуется по-разному в зависимости от наличия косой черты.источник
realpath
разрешает данный путь. Среди прочего он также удаляет косые черты. Используйте-s
для предотвращения следующих симлинковисточник