Автозавершение Bash добавляет / в конце имени каталога. Как я могу убрать это из позиционного параметра?
#!/bin/sh
target=$1
function backup(){
date=`date "+%y%m%d_%H%M%S"`
PWD=`pwd`
path=$PWD/$target
tar czf /tmp/$date$target.tar.gz $path
}
backup
case $x in *[!/]*/) x=${x%"${x##*[!/]}"};; esac
target=${DIR%/}
использование
target=${1%/}
См. Подстановку параметров в этом руководстве по сценариям bash для получения дополнительной информации.
источник
Я думаю, что лучшее решение для канонизации путей - это
realpath $path
или с-m
опцией, если она не существует. Это решение автоматически удаляет ненужные косые черты и добавляет pwdисточник
readlink -f
это немного более портативно, чемrealpath
. Для дополнительных / альтернативных опций: linux.die.net/man/1/readlinktarget=$(realpath -L --relative-base . $1)
Будьте осторожны, bash3 добавил в bash регулярное выражение, похожее на Perl. Упомянутое руководство охватывает это, а также официальное руководство GNU , но не все ссылки.
Что я сделал?
Заменить
2.19/*
быть2.19
.Решение
источник