2014-11-19 16 views
6

Ho appena notato questa riga nel mio /etc/profile e mi chiedevo cosa significasse questo se e quando è vero.Sintassi di Bash in/etc/profile

if [ "${-#*i}" != "$-" ]; then 

i itera su più *.sh file.

Scusate se questa è una domanda stupida, ma come potete immaginare, cercare principalmente simboli in Google non è davvero un'opzione.

Grazie!

risposta

7

Dalla sezione OPTIONS della manpage:

-i  If the -i option is present, the shell is interactive. 

Dalla sezione Special Parameters della manpage:

-  Expands to the current option flags as specified upon invoca- 
     tion, by the set builtin command, or those set by the shell 
     itself (such as the -i option). 

Dalla sezione Parameter Expansion della manpage:

${parameter#word} 
    ${parameter##word} 

La parola viene espansa per produrre un motivo proprio come nel percorso nome espanso. Se il modello corrisponde all'inizio del valore del parametro , il risultato dell'espansione è il valore espanso del parametro con il modello di corrispondenza più breve (il caso '' # '' ) o il modello di corrispondenza più lungo (il '' ' ## 'caso') cancellato. Se il parametro è @ o *, l'operazione di rimozione del motivo viene applicata a turno a e l'espansione è l'elenco risultante . Se parametro è una variabile di matrice con @ o *, l'operazione di rimozione del motivo viene applicata a ciascun membro dell'array a turno e l'espansione è l'elenco risultante .

Così "${-#*i}" dice espandere la variabile $- e rimuovere dall'inizio della stringa fino a quando la lettera i. Tale espansione viene quindi confrontata con != rispetto all'espansione di $- (la stessa variabile solo non modificata).

Quando ciò non sia lo stesso significa la prima espansione rimosso alcuni contenuti che significa la lettera i apparso nel valore di $- che significa che (poiché -i non è un argomento per set) che l'argomento -i stato passato al shell e la shell è una shell interattiva.

+0

Ha senso. Grazie! Lo accetterò quando posso. – Santiago