如何转义与python关键字匹配的bash关键字?

时间:2013-02-06 02:02:46

标签: python bash command-line escaping keyword

示例 - 任何bash关键字(例如elsein)也会导致此问题:

$ python -c 'import sys;for p in sys.path:print p'
  File "<string>", line 1
    import sys;for p in sys.path:print p
                 ^
SyntaxError: invalid syntax

双引号无法修复它。

4 个答案:

答案 0 :(得分:6)

这与for是Bash关键字的事实无关;它只是那个

import sys;for p in sys.path:print p

是无效的Python语法。如果您在没有参数的情况下运行python,然后在提示符处键入该错误,则会收到相同的错误。

您可以通过添加换行符来修复它:

import sys
for p in sys.path:print p

你可以在你的Bash命令中写下这个:

python -c ' import sys
            for p in sys.path:print p
          '

或者这个:

python -c $'import sys\nfor p in sys.path:print p'

(其中$'...'是一种Bash语法,允许在字符串中使用类似C的转义序列,例如换行符为\n

答案 1 :(得分:1)

请尝试以下

python -c "exec(\"import sys;\\nfor p in sys.path:print p\")"

答案 2 :(得分:1)

这是另一种方法....更直接

python -c "import sys; print '\n'.join(sys.path)"

答案 3 :(得分:0)

如果分号和compound_stmt关键字不相邻,则有效:

# instead of '; for'
python -c 'import sys; print [p for p in sys.path]'

# instead of '; if'
python -c "x=1; print x if x>0 else ''"