if [[ "$1" != "" ]]; then
dr="${1/%\//}"
fi
在上面的代码中, "${1/%\//}"
扩展为什么?
答案1
这是一种迂回的方法,可以在、或shell 中删除以 a/
结尾的值末尾的a 。$1
/
bash
ksh
zsh
它使用非标准参数替换,替换匹配项${parameter/%pattern/replacement}
末尾的文本。这里使用的模式是,即文字斜杠(必须对其进行转义,否则它将充当分隔符),并且替换为空。通过测试,仅当值非空时才执行替换和赋值。$parameter
pattern
\/
if
dr
$1
编写相同内容的更便携的方式是
[ -n "$1" ] && dr=${1%/}
或者,
if [ -n "$1" ]; then
dr=${1%/}
fi
标准替换${parameter%pattern}
会删除(最短的子字符串)pattern
从 中的值末尾匹配的内容$parameter
。在上面的代码中,我将其与模式一起使用/
,以删除字符串中的最后一个字符(如果它是斜杠)。
测试也改为不太复杂的-n
测试,即真的如果给定的字符串非空。