混合Bash-Python代码段中变量的双引号与单引号
我完全无法将Python与Bash混合,这对我来说真的很难。混合Bash-Python代码段中变量的双引号与单引号,python,json,bash,quotes,double-quotes,Python,Json,Bash,Quotes,Double Quotes,我完全无法将Python与Bash混合,这对我来说真的很难。 在Bash中使用双引号与单引号取决于您使用变量、转义符和特殊字符的意图。 ,在Python中使用双引号和单引号主要是口味问题,这也证实了这一点 但是,如果我想像这样在Bash中使用Python snippet呢?这两种方法都有效 #!/bin/bash arg3="something special" python << END import functions; print functions.do_smth('$ar
在Bash中使用双引号与单引号取决于您使用变量、转义符和特殊字符的意图。
,在Python中使用双引号和单引号主要是口味问题,这也证实了这一点 但是,如果我想像这样在Bash中使用Python snippet呢?这两种方法都有效
#!/bin/bash
arg3="something special"
python << END
import functions;
print functions.do_smth('$arg', '$arg2')
print len("$arg3");
END
当我使用第一个或第二个变体时,引用是否重要?我是将变量传递给函数还是简单地使用它,这有关系吗
python -c "print 'great program eh'"
python -c "import special; do_smth_special_with('great program eh')"
A我完全不知道所有这些用例之间的差异特别是当我应该将JSON输出作为变量(它也有该死的引号和转义!)从Bash传递到Python函数时,我会遇到很多问题 这里真的需要彻底的解释 Python或Bash规则是否适用于[未加引号的herdeoc]中的引号 Python规则适用于引号;bash规则适用于
$
符号。因为bash从不查看引号,所以bash使用哪种类型的引号并不重要;不管怎样,$foo
都会被替换(除非您使用\$
;bash查看反斜杠)
如果您引用了herdoc分隔符(
避免这样的代码混合。类似SQL注入的情况也可能发生在这里。herdoc
是它自己的引用机制,herdoc
中的引号和单引号不是由bash
解释的。因此在所有情况下,$arg3
都会被扩展,除非您转义\$
.python-c“…”
意味着bash将所有内容都视为双引号,甚至在单引号中也将扩展$
。但是您需要转义\"
字符串内部或bash将终止它。缺少的另一种情况是#1或~,它将在quotation@Oliver,你能给我指一下关于“blubberdiblub”的文档吗?你的意思是避免使用heredocs?或者你的意思是什么混合?谢谢你指向heredoc的帮助。因此Python规则应用于heredocs,Bash规则应用于-c
参数,Python只看到展开引号后剩下的字符串。如果我写Python-c“print'$var'
,Python将收到$var
字符串,如果Python-c“print”$var“
那么Python将收到$var值。对吗?所以抑制扩展的唯一方法是转义引号?@suncatcher:在这两个例子中,bash扩展$var
。在Python-c“print'$var'
中,$var
在双引号内;bash引号不嵌套。在Python-c“print”$var“
$var
是不带引号的,因为EE bash成对匹配引号:首先是“打印”,然后是$var的不带引号的值(字拆分和全局展开),然后是“”
是空的。所以在这个例子中,我们实际上有三个引号对?我应该使用什么引号语法来抑制$var的扩展?我经常在将JSON传递到Python时遇到问题。它们的主体中有'
和\
,Bash经常将我的JSON拆分为数千个参数,将内部引号作为分隔符rs.@suncatcher:python-c'打印“$var”
。如果您想看看bash给python的是什么,请将python-c
替换为echo
。
python -c "print 'great program eh'"
python -c "import special; do_smth_special_with('great program eh')"