如何在bash中检查字符串中的最后一个字符?

时间:2013-10-09 12:25:05

标签: regex bash shell command-line

我需要确保字符串中的最后一个字符是/

x="test.com/"

if [[ $x =~ //$/ ]] ; then
        x=$x"extention"
else
        x=$x"/extention"
fi

此刻,虚假总是火上浇油。

4 个答案:

答案 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指定的字符。长度和偏移量是算术的   表达......