0

bash / optparse に奇妙な問題があります。文字列が定義されているときに、文字列を Python スクリプトに渡す必要があります。

次のコードを使用します。

./lol.py `if [ -n "$URL" ]; then echo -u \"$URL\"; fi`

ここにpythonスクリプトがあります:

def main():
    parser = OptionParser()
    parser.add_option("-u", dest="url")
    opts, args = parser.parse_args()
    print opts.url

bash 式をテストすると、動作しているように見えます。

user@fomce02:~$ URL="http://lol.com/my project/"
user@fomce02:~$ echo `if [ -n "$URL" ]; then echo -u \"$URL\"; fi`
-u "http://lol.com/my project/"

ただし、引数を指定してpythonスクリプトを実行すると

user@fomce02:~$ ./lol.py `if [ -n "$URL" ]; then echo -u "$URL"; fi`
http://lol.com/my

空白の後の文字列の一部を切り捨てます。

なぜそれが起こっているのか、それを機能させる方法を説明していただけますか?

4

1 に答える 1

2

これは、スクリプトに送信する引用符が構文ではなく文字どおりであるためです。つまり、パラメータとを受け取ります。コマンドの結果を単一のパラメーターとして渡したい場合は、コードを構文引用符で囲む必要があります。lol.py"http://lol.com/myproject/"

./lol.py "$(if [ -n "$URL" ]; then echo -u "$URL"; fi)"

バッククォートも修正しました。Bash を使用している場合は、使用することを強くお勧めします$()コマンド置換の内側と外側では引用符のコンテキスト異なるため、外側の引用符が内側の引用符に影響を与える危険はないことに注意してください。

于 2012-04-30T12:21:30.263 に答える