“${1/%\//}”扩展为什么?

“${1/%\//}”扩展为什么?
if [[ "$1" != "" ]]; then
    dr="${1/%\//}"
fi

在上面的代码中, "${1/%\//}"扩展为什么?

答案1

这是一种迂回的方法,可以在、或shell 中删除以 a/结尾的值末尾的a 。$1/bashkshzsh

它使用非标准参数替换,替换匹配项${parameter/%pattern/replacement}末尾的文本。这里使用的模式是,即文字斜杠(必须对其进行转义,否则它将充当分隔符),并且替换为空。通过测试,仅当值非空时才执行替换和赋值。$parameterpattern\/ifdr$1

编写相同内容的更便携的方式是

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

或者,

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

标准替换${parameter%pattern}会删除(最短的子字符串)pattern从 中的值末尾匹配的内容$parameter。在上面的代码中,我将其与模式一起使用/,以删除字符串中的最后一个字符(如果它是斜杠)。

测试也改为不太复杂的-n测试,即真的如果给定的字符串非空。

相关内容