「${1/%\//}」が拡張されるのはなぜですか?

「${1/%\//}」が拡張されるのはなぜですか?
if [[ "$1" != "" ]]; then
    dr="${1/%\//}"
fi

上記のコードで "${1/%\//}"拡張とは何ですか?

答え1

/これは、aまたはシェルからaで終わる値の終わりからaを削除するバイパス方法です。$1/bashkshzsh

非標準パラメータ置換を使用して一致が終わったら、テキストを置き換えます${parameter/%pattern/replacement}。ここで使用されるパターンは、文字通りのスラッシュ(そうでなければエスケープする必要があり、区切り文字として機能します)が何もないものに置き換えられるということです。テストでは、値がnullでない場合にのみ置換と割り当てが行われます。$parameterpattern\/ifdr$1

同じコンテンツを作成するより移植可能な方法は次のとおりです。

[ -n "$1" ] && dr=${1%/}

または、

if [ -n "$1" ]; then
    dr=${1%/}
fi

標準置換は、値の末尾から一致するもの${parameter%pattern}(最も短い部分文字列)を削除します。上記のコードでは、スラッシュの場合は文字列の最後の文字を削除するためにパターンと一緒に使用しています。pattern$parameter/

テストも複雑ではない-nテストに変更されました。本物与えられた文字列が空でない場合。

関連情報