我一直在学习并清除对蟒蛇sys.argv
的一些误解。当我在bash中从命令行传递不同的字符时,我注意到:
script.py
import sys
def test(x):
return x
print test(sys.argv)
>>>python script.py [first, second, third]
将打印:
['script.py', '[first,', 'second,', 'third]']
和
>>>python script.py {first, second, third}
['script.py', '{first,','second,','third}']
可是:
>>>python script.py (first,second,third)
bash: syntax error near unexpected token `('
这是python还是bash,也许两者都有?有什么理由吗?
答案 0 :(得分:3)
这是bash; parens在子shell中运行命令链。
pwd ; ( cd /tmp ; pwd ) ; pwd
如果你想在论证中使用它们,你需要引用它们。
echo '(foo)'
答案 1 :(得分:2)
这是bash
shell,错误消息显示:
bash: syntax error near unexpected token `('
bash
将括号用于其自身目的(对命令进行分组)
尝试转义括号,如下所示:
python script.py "(first,second,third)"
这也可能有效:
python script.py \(first,second,third\)
答案 2 :(得分:1)
正如@Ignacio所说,尝试在bash命令行中引用每个参数。
但是,您似乎将bash视为Python方式。它们是不同的东西。
这里有一个很好的(和基本的)shell脚本编写教程:http://www.freeos.com/guides/lsst/
您只需阅读第2章即可了解问题的答案。