2010-01-18 3 views
0

Ok, je ne peux pas comprendre cela en lisant la documentation de Perl. Je regarde le script d'initialisation RHEL4 pour Apache ... Que fait cette ligne de code?

httpd=${HTTPD-/usr/sbin/httpd} 

Pourquoi ne pas simplement httpd=/usr/sbin/httpd? Quoi de neuf avec toute la syntaxe supplémentaire?

-Geoffrey Lee

+3

Ce n'est pas Perl, shell ressemble. – Schwern

+0

Cela expliquerait pourquoi les docs Perl n'ont pas aidé! : P – geofflee

Répondre

6

Ce n'est pas Perl, sa coquille. Les scripts Init sont généralement écrits en shell. Plus précisément, cela signifie "si défini, utilisez la variable d'environnement HTTPD, sinon utilisez/usr/sbin/httpd".

Regardez here pour plus d'informations.

+0

penses-tu que OP a une faute de frappe? Devrait-il être $ HTTPD: - au lieu de simplement - – ghostdog74

+0

'$ {VAR-default}' fonctionne, bien que ce ne soit pas la façon bash documentée de le faire. Je ne peux pas en dire plus, je ne suis pas vraiment un programmeur de shell. – Schwern

+0

Il est certainement documenté: recherchez la section "Paramater Expansion" dans la page de manuel. –

2

Le deux-points affecte si la variable est vérifiée pour être non définie ou nulle par rapport à la vérification uniquement si elle est désactivée.

$ var="goodbye"; echo ${var-hello} 
goodbye 
$ var="goodbye"; echo ${var:-hello} 
goodbye 
$ var= ; echo ${var:-hello} 
hello 
$ var= ; echo ${var-hello} # var is null, only test for unset so no sub. made 

$ unset var; echo ${var:-hello} 
hello 
$ unset var; echo ${var-hello} 
hello 

De la page man Bash:

 
     When not performing substring expansion, using the forms documented 
     below, bash tests for a parameter that is unset or null. Omitting the 
     colon results in a test only for a parameter that is unset. 

     ${parameter:-word} 
       Use Default Values. If parameter is unset or null, the expan‐ 
       sion of word is substituted. Otherwise, the value of parameter 
       is substituted. 
Questions connexes