我完全无法将 Python 与 Bash 混合使用,这对我来说真的很难。
I know在 Bash 中使用双引号还是单引号取决于您打算使用变量、转义字符和特殊字符。
I also know , 在 Python 中使用双引号和单引号主要是个人喜好问题 PEP8也证实了这一点。
但是如果我想像这样在 inside Bash 中使用 Python 片段怎么办?无论哪种方式,它都有效。
#!/bin/bash
arg3="something special"
python << END
import functions;
print functions.do_smth('$arg', '$arg2')
print len("$arg3");
END
Python 或 Bash 规则是否适用于上述代码段中的引号?
和这样分配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 函数时,我遇到了很多问题。
这里真的需要彻底的解释。
最佳答案
Does Python or Bash rules apply for the quotes in [an unquoted heredoc]?
Python 规则适用于引号; bash 规则适用于 $
印记。由于 bash 从不查看引号,因此 bash 是什么类型的引号并不重要; $foo
无论如何都会被替换(除非您使用 \$
;bash 查看反斜杠)。
如果您引用了 heredoc 分隔符 ( <<<"END"
),那么 bash 将不会尝试替换变量扩展,也不会解释反斜杠。
heredoc 的规则在 bash manual 中有详尽的解释。 .
Is it different from [python -c "…"]?
是的,bash 在将命令行参数传递给程序之前对其进行解释,因此 bash 规则适用并且 python 只看到通过的任何引号。
命令行中的单词规则在 bash manual 中有详尽的解释。 (在上下文中阅读本节)。
关于python - 混合 Bash-Python 代码段中变量的双引号与单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43699459/