Le script suivant contient plusieurs chemins (relatifs/absolus) (BASEPATH) avec un chemin relatif (SUBDIR) :
shopt -s extglob
SUBDIR="subdir"
for BASEPATH in '' / base base/ base// /base /base/ /base//; do
echo "BASEPATH = \"$BASEPATH\" --> ${BASEPATH%%+(/)}${BASEPATH:+/}$SUBDIR"
done
Dont la sortie est :
BASEPATH = "" --> subdir
BASEPATH = "/" --> /subdir
BASEPATH = "base" --> base/subdir
BASEPATH = "base/" --> base/subdir
BASEPATH = "base//" --> base/subdir
BASEPATH = "/base" --> /base/subdir
BASEPATH = "/base/" --> /base/subdir
BASEPATH = "/base//" --> /base/subdir
Le shopt -s extglob
n'est nécessaire que pour permettre à BASEPATH de se terminer sur plusieurs slashs (ce qui est probablement absurde). Sans extension de globing, vous pouvez simplement utiliser :
echo ${BASEPATH%%/}${BASEPATH:+/}$SUBDIR
ce qui se traduirait par le moins soigné mais toujours fonctionnel :
BASEPATH = "" --> subdir
BASEPATH = "/" --> /subdir
BASEPATH = "base" --> base/subdir
BASEPATH = "base/" --> base/subdir
BASEPATH = "base//" --> base//subdir
BASEPATH = "/base" --> /base/subdir
BASEPATH = "/base/" --> /base/subdir
BASEPATH = "/base//" --> /base//subdir