2012-12-20 4 views
10

Je regarde le code source de virtualenv, et le script activate contient ce code:Que fait si ["x"! = X] dans bash?

if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then 
    _OLD_VIRTUAL_PS1="$PS1"  
    if [ "x" != x ] ; then 
     PS1="$PS1" 
    else 
    if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then 
     # special case for Aspen magic directories 
     # see http://www.zetadev.com/software/aspen/ 
     PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" 
    else 
     PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" 
    fi 
    fi 
    export PS1 
fi 

Qu'est-ce que la ligne if [ "x" != x ] faire? x n'est défini nulle part ailleurs dans le script.

Répondre

10

Dans Bash, ce test est garanti en échec; [ "x" != x ] renvoie toujours un statut de sortie non nul (c'est-à-dire "faux"), car "x" et x sont tous les deux la chaîne constituée du caractère unique x. (Les guillemets n'ont vraiment aucun effet dans ce cas.)

De plus, la commande PS1="$PS1" ne fait rien non plus: elle ne fait que définir la variable PS1 égale à la valeur qu'elle a déjà.

Je suppose que ce script est autogénéré d'une manière ou d'une autre, et que sur certains systèmes, ces instructions sembleront un peu différentes, et un peu moins inutiles.

+3

Il ressemble à l'ancien truc [["x $ foo"! = X] 'pour vérifier les chaînes vides sur les anciens shells. –

+0

C'est exactement ce qui se passe. Le script est généré automatiquement, et parfois il y a une variable qui y est ajoutée. Voir [this] (https://github.com/pypa/virtualenv/blob/develop/virtualenv_embedded/activate.sh#L59) et [this] (https://github.com/pypa/virtualenv/blob/develop/ virtualenv.py # L1582). Je vous remercie! –

+0

@AKaptur: De rien! – ruakh