2016-08-23 2 views
1

J'écrivais peu de scripts et soudainement je pensais aux commandes suivantes dans les shells CSH et BASH.Comportement de 'ECHO' dans csh et bash

En shell csh

$ echo $?BASH 
    0 
$ echo $?HOME 
    1 
$ echo $? home 
    0 home 

Dans shell bash

$ echo $?BASH 
    0BASH 
$ echo $?HOME 
    0HOME 
$ echo $? home 
    0 home 

Quelqu'un expliquer le comportement ci-dessus. Je connais le echo $? imprime le statut de sortie de la dernière commande mais si elle est ajoutée avec de la chaîne alors comment ça marche?

+2

http://stackoverflow.com/questions/16975968/what-does-var-mean-in-csh. Je ne savais pas non plus, je l'ai cherché et j'ai trouvé ça en 20 secondes environ. – 123

Répondre

3

Si vous passez en revue la documentation csh indique:

$?name 
${?name} 
Substitutes the string 1 if the variable name is set, 0 if it is not. 

$?0 
Substitutes 1 if the current input file name is known, 0 if it is not. 

http://www.mkssoftware.com/docs/man1/csh.1.asp

attention, $? est différent de $? name

+0

Merci! Et qu'en est-il de BASH? –

+0

Puisque 'BASH' n'est pas un nom de paramètre valide, l'analyseur' bash' sait que '$? BASH' est constitué de deux parties: l'expansion de paramètre' $? 'Et la chaîne littérale' BASH'. – chepner