2013-08-28 54 views

回答

69

許多方法可以做到這一點。你可以在雙括號使用通配符:

str="/some/directory/file" 
if [[ $str == /* ]]; then echo 1; else echo 0; fi 

您可以使用子串擴展:

if [[ ${str:0:1} == "/" ]] ; then echo 1; else echo 0; fi 

還是一個正則表達式:

if [[ $str =~ ^/ ]]; then echo 1; else echo 0; fi 
+5

[[$ str =〜^ /]]就夠了 –

+0

@ Aleks-DanielJakimenko確實...更新 – user000001

5
$ foo="/some/directory/file" 
$ [ ${foo:0:1} == "/" ] && echo 1 || echo 0 
1 
$ foo="[email protected]:/some/directory/file" 
$ [ ${foo:0:1} == "/" ] && echo 1 || echo 0 
0 
+2

Downvote!你忘了在單個括號中引用你的變量。 ''富= '*'; [$ {foo:0:1} ==「/」] && echo 1 || echo 0''會輸出這個錯誤''bash:[:too many arguments''。使用''[$ {foo:0:1}「==」/「] && echo 1 || echo 0''甚至更好''[[$ {foo:0:1} ==「/」]] && echo 1 || echo 0'' –

10

考慮case語句,以及它是與大多數sh基殼體兼容:

case "$STRING" in 
/*) 
    echo 1 
    ;; 
*) 
    echo 0 
    ;; 
esac 
+0

我認爲glob'*'只匹配單個路徑組件,從不跨越斜槓'/' – user1011471

相關問題