Automatyczne uzupełnianie przez Bash dodaje znak / na końcu nazwy katalogu. Jak mogę usunąć to z parametru pozycyjnego?
#!/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%/}
Posługiwać się
target=${1%/}
Więcej informacji znajdziesz w opisie podstawiania parametrów w tym przewodniku po skryptach bash .
źródło
Myślę, że lepszym rozwiązaniem do kanonizacji ścieżek jest opcja
realpath $path
lub-m
opcja, jeśli jej nie ma. To rozwiązanie automatycznie usuwa niepotrzebne ukośniki i dodaje pwdźródło
readlink -f
jest trochę bardziej przenośny niżrealpath
. Dodatkowe / alternatywne opcje: linux.die.net/man/1/readlinktarget=$(realpath -L --relative-base . $1)
Uważaj, bash3 dodał do basha wyrażenie regularne podobne do perl. Wspomniany przewodnik obejmuje to, jak również oficjalny przewodnik GNU , ale nie wszystkie odniesienia tak.
Co ja zrobiłem?
Zastąp
2.19/*
być2.19
.Rozwiązanie
VER="2.19/foo-bar" NEWVER=${VER%/*}
źródło