1

このコマンドをbashスクリプトの一部として持っています

$(python -c "import urllib, sys; print urllib.unquote(sys.argv[0])", "h%23g")

しかし、実行すると、次のようになります。

-bash: -c: command not found

あたかも bash が を読み逃したかのように、 がコマンドの名前であるpythonと考えています。-cバックティックを使用する場合もまったく同じことが起こります。

どうすればbashに認識させることができpythonますか?

4

2 に答える 2

6

Python コマンドは $(...) 構造から文字列 "-c" を返し、bash が実行を試みます。

例えば

python -c "import urllib, sys; print urllib.unquote(sys.argv[0])"

「-c」を出力するため、本質的には、エラーが有効な $(-c) を解釈するように bash に要求しています。

于 2013-04-09T17:37:24.527 に答える
3

次のようなものが欲しいと思います:

$(python -c "import urllib, sys; print urllib.unquote(sys.argv[1])" "h%23g")

という結果になりh#gます。行にこれだけしかない場合は、というコマンドも実行しようとするh#gため、実際にはこれをより大きなコマンドの一部として使用していると思います。

お使いのバージョンの問題は、それsys.argv[0]-cコマンドからのものであり、urllib.unquote('-c')単に を返すこと'-c'です。

ドキュメントからsys.argv

-cインタープリターへのコマンド ライン オプションを使用してコマンドが実行された場合はargv[0]、文字列 に設定されます'-c'

それをmanページの情報と組み合わせると(強調は私のものです):

-c command
実行するコマンドを指定します (次のセクションを参照)。これにより、オプション リストが終了します(次のオプションは引数としてコマンドに渡されます)

したがって、 を使用すると-c、に提供される引数はスクリプトになるため、 には含まれず、追加の引数はインデックス 1 から始まる に追加されます。sys.argv[0]'-c'-csys.argvsys.argv

于 2013-04-09T17:37:14.270 に答える