cat /tmp/testme
#!/usr/bin/env python3
import sys
print(sys.argv[0])
print(sys.argv[1])
这很简单,只需将从bash传递的参数打印到python。
x="i am a book"
/tmp/testme "i am a book"
/tmp/testme
i am a book
字符串i am a book
可以作为一个完整的字符串传递到python程序中。
/tmp/testme ${x}
/tmp/testme
i
echo ${x}
i am a book
为什么python不能整体处理$ {x} i am a book
,它只获得字符串中的第一个字符作为参数。
答案 0 :(得分:1)
执行行/tmp/testme ${x}
时,bash将扩展x
的内容,并最终执行/tmp/testme i am a book
。因此,sys.argv
将成为['/tmp/testme', 'i', 'am', 'a', 'book']
。
要获得所需的行为,应引用${x}
,例如"${x}"
。然后bash将执行/tmp/testme 'i am a book'
。
这是一个带有bash脚本的示例。使用set -x
,bash将在评估所有变量之后在执行命令时打印命令及其参数。
$ cat testme
#!/usr/bin/env python3
import sys
print(sys.argv)
$ cat exampleBashScript.sh
#!/usr/bin/env bash
set -x
x="i am a book"
./testme ${x}
./testme "${x}"
$ ./exampleBashScript.sh
+ x='i am a book'
+ ./testme i am a book
['./testme', 'i', 'am', 'a', 'book']
+ ./testme 'i am a book'
['./testme', 'i am a book']