python - 混合 Bash-Python 代码段中变量的双引号与单引号

标签 python json bash quotes double-quotes

我完全无法将 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/

相关文章:

python - 如何除以 Tensorflow 中向量的大小来计算平均损失(如 MSE)?

linux - Crontab 不运行 bash/sh 脚本的某些部分

git - 如何使用 git 和 git hooks 同步数据库以及如果它不起作用如何调试

string - 使用字符作为 bash 中的分隔符获取最后一个字符串

python - Python 中的饼图和条形图

Python 匹配 xx-xxxx 数字 - 结果不准确

javascript - JSONP + 语法错误 : missing ; before statement

c++ - 在 qt 中解析嵌套 json 的意外结果(数组不存在)

json - WP API 按 Post Schema 过滤

python - 属性错误 : 'HTTPResponse' object has no attribute 'type'