我在unix中編寫了一個腳本,我必須檢查字符串中的第一個字符是否爲「/」,如果是,分支。如何在unix中檢查字符串中的第一個字符
,比如我有一個字符串
/some/directory/file
我想這回1
和
[email protected]:/some/directory/file
這個返回0
我怎麼能繼續做到這一點?
我在unix中編寫了一個腳本,我必須檢查字符串中的第一個字符是否爲「/」,如果是,分支。如何在unix中檢查字符串中的第一個字符
,比如我有一個字符串
/some/directory/file
我想這回1
和
[email protected]:/some/directory/file
這個返回0
我怎麼能繼續做到這一點?
許多方法可以做到這一點。你可以在雙括號使用通配符:
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
$ 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
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'' –
考慮case語句,以及它是與大多數sh基殼體兼容:
case "$STRING" in
/*)
echo 1
;;
*)
echo 0
;;
esac
我認爲glob'*'只匹配單個路徑組件,從不跨越斜槓'/' – user1011471
[[$ str =〜^ /]]就夠了 –
@ Aleks-DanielJakimenko確實...更新 – user000001