6

Python のバージョンを照会する次のシェル スクリプトがあります。"Integer expression expected"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

「echo $PYTHON_VERSION」は「0」を出力するのに、なぜ if ステートメントが機能しないのでしょうか?

編集: Windows と Cygwin を使用しています

4

3 に答える 3

7

良い質問。私にとってはうまくいっています。常に評価された変数を ("$X"の代わりに$X) 引用する必要があります。多分それはあなたのエラーを修正します。

ただし、出力の代わりに python スクリプトの結果を使用することを提案します。

#!/bin/bash
if python -c 'import sys; sys.exit(1 if sys.hexversion<0x03000000 else 0)'
then
    echo "Fine!"
fi

完全にシェルにとどまりたい場合は、次の--versionオプションも使用できます。

case "$(python --version 2>&1)" in
    *" 3."*)
        echo "Fine!"
        ;;
    *)
        echo "Wrong Python version!"
        ;;
esac

そのほうが読みやすいかも。

于 2012-11-09T14:54:14.637 に答える
2

機能しない理由は、$PYTHON_VERSION に格納された結果が整数ではないためです。そのため、等価性テストは 2 つの異なる型で行われています。

if を次のように変更できます。

if [ $PYTHON_VERSION -eq "0" ]; then
     echo "fine!"
fi

または、次のことができます。

if [ $PYTHON_VERSION = 0 ]; then
于 2012-11-09T14:59:16.970 に答える
0

ここに可能な解決策があります

if sys.version_info < (3, 0):
    reload(sys)
    sys.setdefaultencoding('utf8')
else:
    raw_input = input

これは私が sleekxmpp から持っていた例からのものですが、あなたが必要としていると私が信じていることをします。

于 2012-11-09T14:52:33.120 に答える