我需要确保字符串中的最后一个字符是/
x="test.com/"
if [[ $x =~ //$/ ]] ; then
x=$x"extention"
else
x=$x"/extention"
fi
此刻,虚假总是火上浇油。
答案 0 :(得分:8)
像这样,例如:
$ x="test.com/"
$ [[ "$x" == */ ]] && echo "yes"
yes
$ x="test.com"
$ [[ "$x" == */ ]] && echo "yes"
$
$ x="test.c/om"
$ [[ "$x" == */ ]] && echo "yes"
$
$ x="test.c/om/"
$ [[ "$x" == */ ]] && echo "yes"
yes
$ x="test.c//om/"
$ [[ "$x" == */ ]] && echo "yes"
yes
答案 1 :(得分:3)
您的情况略微不正确。使用=~
时,rhs被视为一种模式,因此您要说pattern
而不是/pattern/
。
如果你说
,你会得到预期的结果if [[ $x =~ /$ ]] ; then
而不是
if [[ $x =~ //$/ ]] ; then
答案 2 :(得分:3)
您可以使用${var:index}
和${#var}
在Bash中索引字符串以获取字符串的长度。负索引表示从字符串的结尾移动到开头,以便-1
是最后一个字符的索引:
if [[ "${x:${#x}-1}" == "/" ]]; then
# last character of x is /
fi
答案 3 :(得分:0)
您可以使用bash子字符串$(string:offset:length}
来执行此操作 - length
是可选的
#x
是x
因此
$n = 1 # 1 character
last_char = ${x:${#x} - $n}
供将来参考,
$ man bash
拥有所有魔力
$ {参数:偏移量:长度}
子串扩展。扩展到参数的最大长度字符 从offset指定的字符开始。如果长度是 省略,扩展到从的开始的参数的子串 offset指定的字符。长度和偏移量是算术的 表达......