2013-08-28 19 views

risposta

69

Molti modi per farlo. È possibile utilizzare i caratteri jolly tra doppie parentesi quadre:

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

È possibile utilizzare l'espansione substring:

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

O un'espressione regolare:

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

[[$ str = ~^/]] è sufficiente –

+0

@ Aleks-DanielJakimenko Infatti ... Aggiornato – 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

Voto precedente! Hai dimenticato di citare la tua variabile in parentesi graffe singole. '' Foo = '*'; [$ {foo: 0: 1} == "/"] && echo 1 || echo 0'' restituirà questo errore '' bash: [: too many arguments''. Usa '' ["$ {pippo: 0: 1}" == "/"] && echo 1 || echo 0'' o anche meglio '' [[$ {pippo: 0: 1} == "/"]] && echo 1 || echo 0'' –

10

consideri l'istruzione case, oltre che è compatibile con la maggior parte delle shell basate su sh:

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

Pensavo che glob '*' corrisponda solo a un singolo componente del percorso, mai attraverso le barre '/' – user1011471

Problemi correlati