2013-08-28 40 views

Trả lời

69

Nhiều cách để thực hiện việc này. Bạn có thể sử dụng ký tự đại diện trong ngoặc kép:

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

Bạn có thể sử dụng substring mở rộng:

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

Hoặc một regex:

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

[[$ str = ~^/]] là đủ –

+0

@ Aleks-DanielJakimenko Thật vậy ... Cập nhật – 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! Bạn quên trích dẫn biến của bạn trong dấu ngoặc đơn. '' foo = '*'; [$ {foo: 0: 1} == "/"] && echo 1 || echo 0'' sẽ xuất ra lỗi này '' bash: [: quá nhiều đối số''. Sử dụng '' ["$ {foo: 0: 1}" == "/"] && echo 1 || echo 0'' hoặc thậm chí tốt hơn '' [[$ {foo: 0: 1} == "/"]] && echo 1 || echo 0'' –

10

Xem xét các báo cáo trường hợp cũng là tương thích với hầu hết các vỏ sành điệu:

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

Tôi nghĩ glob '*' chỉ khớp với một thành phần đường dẫn duy nhất, không bao giờ xuyên qua dấu gạch chéo '/' – user1011471

Các vấn đề liên quan