【发布时间】:2017-09-27 17:00:49
【问题描述】:
我完全坚持将 Python 与 Bash 混合使用,这对我来说真的很难。
I know 在 Bash 中使用双引号还是单引号取决于您使用变量、转义符和特殊字符的意图。
I also know,在 Python 中使用双引号还是单引号主要是个人喜好问题,PEP8 也证实了这一点。
但是如果我想像这样使用 Python sn-p inside Bash 怎么办?无论哪种方式都可以。
#!/bin/bash
arg3="something special"
python << END
import functions;
print functions.do_smth('$arg', '$arg2')
print len("$arg3");
END
Python 或 Bash 规则是否适用于上述 sn-p 中的引号?
和这样的Python代码分配有区别吗?
python -c "import functions; print functions.do_smth('$arg', '$arg2'); print len("$arg3");"
当我使用第一个或第二个变体时,引用是否重要?我将变量传递给函数还是简单地使用它有关系吗?
python -c "print 'great program eh'"
python -c "import special; do_smth_special_with('great program eh')"
A 完全不知道所有这些用例之间的区别!
尤其是当我应该将 JSON 输出作为变量(也有该死的引号和转义符!)从 Bash 传递到 Python 函数时,我遇到了很多问题。
这里真的需要彻底的解释。
【问题讨论】:
-
避免混合这样的代码。类似的事情也可能在这里发生,例如 SQL 注入可能发生的事情。
-
heredoc是它自己的引用机制,heredoc中的引号和单引号不会被bash解释。因此,在所有情况下,$arg3都会被扩展,除非您转义\$。python -c "..."表示 bash 将所有内容都视为双引号,并且即使在单引号中也会扩展$。但是你需要在字符串中转义\",否则 bash 会终止它。 -
您缺少的另一种情况是 `` 标记,它们位于 #1 或 ~ 的左侧,它将在引号内执行 shell 进程
-
@Oliver,你能给我指点关于``的文档吗?
-
@blubberdiblub,你的意思是避免使用 heredocs?或者你的意思是什么混合?
标签: python json bash quotes double-quotes