次のスクリプトは、複数の (相対/絶対) パス (BASEPATH) を相対パス (SUBDIR) で連結します。
shopt -s extglob
SUBDIR="subdir"
for BASEPATH in '' / base base/ base// /base /base/ /base//; do
echo "BASEPATH = \"$BASEPATH\" --> ${BASEPATH%%+(/)}${BASEPATH:+/}$SUBDIR"
done
その出力は次のとおりです。
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
これshopt -s extglob
は、BASEPATH が複数のスラッシュで終了できるようにするためだけに必要です (これはおそらくナンセンスです)。拡張グロビングがなければ、次のものを使用できます。
echo ${BASEPATH%%/}${BASEPATH:+/}$SUBDIR
これにより、すっきりしていませんが、まだ機能しています。
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