1

我一直在学习和消除对 pythons 的一些误解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,也许两者兼而有之?有什么理由吗?

4

3 回答 3

3

这是重击;parens 在子 shell 中运行命令链。

pwd ; ( cd /tmp ; pwd ) ; pwd

如果要在参数中使用括号,则需要引用它们。

echo '(foo)'
于 2012-08-17T03:36:45.373 回答
2

这是bash错误消息显示的外壳:

bash: syntax error near unexpected token `('

bash为自己的目的使用括号(对命令进行分组)

尝试像这样转义括号:

   python script.py "(first,second,third)"

这也可能有效:

  python script.py \(first,second,third\)
于 2012-08-17T03:36:50.210 回答
1

正如@Ignacio 所说,尝试在 bash 命令行中引用每个参数。

但是,您似乎将 bash 视为 Python 方式。它们是不同的东西。

这里有一个很好的(和基本的)shell 脚本教程:http ://www.freeos.com/guides/lsst/

你只需要阅读第 2 章就知道你的问题的答案。

于 2012-08-17T04:00:10.577 回答