Why does this snippet with a shebang #!/bin/sh and exec python inside 4 single quotes work?
我试图理解这个问题的答案之一:
无法使用"#!/ usr / bin / env python"将参数传递给python
1 2 | #!/bin/sh ''''exec python -u --"$0" ${1+"$@"} # ''' |
这很好用,但我不明白为什么它在该行的开头而不是三行时使用四个滴答。
另外,为什么哈希接近那个字符串的末尾?
Python支持三引号字符串:
1 | '''something''' |
Shell仅支持单引号字符串:
1 | 'something' |
通过使用四个引号,
然后,该行的其余部分被
然后
所以,总结一下:
-
sh 看到:空字符串('' ) - 空字符串('' ) - 命令(exec python -u --"$0" ${1+"$@"} ) - 注释(# ''' ) -
Python看到:三引号字符串文字(包含字符
'exec python -u --"$0" ${1+"$@"} # )
所以
因为它是文件中的第一个字符串文字,所以它将被设置为
我只是用:
1 2 3 4 5 | #!/bin/sh ''':' exec python -tt"$0""$@" ''' # The above shell shabang trick is more portable than /usr/bin/env and supports adding arguments to the interpreter (python -tt) |