J'ai le script shell suivant pour interroger la version Python. Cela me donne une erreur indiquant "expression entier attendue" code> sur la déclaration IF.
#!/bin/bash
PYTHON_VERSION=`python -c 'import sys; print("%i" % (sys.hexversion<0x03000000))'`
echo $PYTHON_VERSION
if [ $PYTHON_VERSION -eq 0 ]
then
echo "fine!"
fi
3 Réponses :
Voici une solution possible
if sys.version_info < (3, 0): reload(sys) sys.setdefaultencoding('utf8') else: raw_input = input
N'est-ce pas son problème sur la coquille?
bonne question. Pour moi, ça marche bien. Vous devez toujours citer les variables évaluées ( Mais je propose d'utiliser le résultat du script Python au lieu de sa sortie: p> Si vous souhaitez rester complètement dans la coquille complètement, Vous pouvez également utiliser l'option peut-être plus lisible. p> p> "$ x" code> au lieu de
$ x code>); Peut-être que cela corrige votre erreur.
- version code>: p>
La raison pour laquelle cela ne fonctionne pas est que le résultat stocké en $ python_version n'est pas un entier, votre test d'égalité est donc effectué avec deux types différents.
Vous pouvez modifier le si: P> ou vous pouvez simplement faire: p>
OK, je pensais que Bash convertirait implicitement entre String-to-Int et IntT-to-String?
C'est le problème, le problème n'est pas avec la conversion, mais comment -eq interprétant l'expression. Il y a quelques cas que vous devez avoir: si [[]] au lieu de si [] ou -eq ne fera pas la bonne chose.
Pourriez-vous cligner quel OS et votre shell utilisez-vous? Je l'ai essayé sous OS X avec Bash et ZSH, fonctionne bien.