在python和bash之间传递整个字符串作为参数

时间:2019-06-01 01:22:18

标签: python bash arguments

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,它只获得字符串中的第一个字符作为参数。

1 个答案:

答案 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']