2013-10-09 31 views

回答

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 
+0

太棒了。星星表示什麼?如果x有多個'/',這會得到誤報嗎? –

+0

@MildFuzz星號'*'表示「任何字符」。所以你也可以這樣做'[['$ x「== * m /]] && echo」yes「''在這種情況下會說yes,但是不會在'x =」test.comp /「中。對於多個'/'它也會很好,查看我的更新示例。 – fedorqui

3

你的條件爲:略有不正確。當使用=~時,rhs被認爲是一種模式,所以你會說pattern而不是/pattern/

你必須得到預期的結果,如果你說

if [[ $x =~ /$ ]] ; then 

,而不是

if [[ $x =~ //$/ ]] ; then 
3

您可以使用${var:index}${#var}得到字符串的長度猛砸指數字符串。負指數是指從末端到字符串的開頭,這樣-1是最後一個字符的指數移動:

if [[ "${x:${#x}-1}" == "/" ]]; then 
    # last character of x is/
fi 
+0

負指標是允許的,但是您需要一個空間來區分子串擴展和默認值擴展:'$ {x:-1}'。您實際上並未使用負指數,而是計算出的正指數。 – chepner

0

你可以做到這一點一般使用bash子$(string:offset:length} - length是可選

#x是x的長度

因此

$n = 1  # 1 character 
last_char = ${x:${#x} - $n} 

以供日後參考,

$ man bash 

擁有所有的魔法

$ {參數:偏移量:長度}

子串擴展。從由offset指定的字符開始擴展到參數 的長度字符。如果省略的長度爲 ,則展開爲由偏移量指定的 字符開始的參數子字符串。長度和偏移量是算術表達式 ...

相關問題