我需要確保在字符串中的最後一個字符是一個/
如何檢查bash中字符串中的最後一個字符?
x="test.com/"
if [[ $x =~ //$/ ]] ; then
x=$x"extention"
else
x=$x"/extention"
fi
的那一刻,假的始終閃光。
我需要確保在字符串中的最後一個字符是一個/
如何檢查bash中字符串中的最後一個字符?
x="test.com/"
if [[ $x =~ //$/ ]] ; then
x=$x"extention"
else
x=$x"/extention"
fi
的那一刻,假的始終閃光。
這樣,例如:
$ 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
你的條件爲:略有不正確。當使用=~
時,rhs被認爲是一種模式,所以你會說pattern
而不是/pattern/
。
你必須得到預期的結果,如果你說
if [[ $x =~ /$ ]] ; then
,而不是
if [[ $x =~ //$/ ]] ; then
您可以使用${var:index}
和${#var}
得到字符串的長度猛砸指數字符串。負指數是指從末端到字符串的開頭,這樣-1
是最後一個字符的指數移動:
if [[ "${x:${#x}-1}" == "/" ]]; then
# last character of x is/
fi
負指標是允許的,但是您需要一個空間來區分子串擴展和默認值擴展:'$ {x:-1}'。您實際上並未使用負指數,而是計算出的正指數。 – chepner
你可以做到這一點一般使用bash子$(string:offset:length}
- length
是可選
#x
是x的長度
因此
$n = 1 # 1 character
last_char = ${x:${#x} - $n}
以供日後參考,
$ man bash
擁有所有的魔法
$ {參數:偏移量:長度}
子串擴展。從由offset指定的字符開始擴展到參數 的長度字符。如果省略的長度爲 ,則展開爲由偏移量指定的 字符開始的參數子字符串。長度和偏移量是算術表達式 ...
太棒了。星星表示什麼?如果x有多個'/',這會得到誤報嗎? –
@MildFuzz星號'*'表示「任何字符」。所以你也可以這樣做'[['$ x「== * m /]] && echo」yes「''在這種情況下會說yes,但是不會在'x =」test.comp /「中。對於多個'/'它也會很好,查看我的更新示例。 – fedorqui