有人可以解释这个bash脚本是如何工作的吗?我不理解的部分是<tbody>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td>User sign:</td>
<td class="signLabel">Here:------------------</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
,这个语法在bash中意味着什么?
""":"
测试运行结果:
#!/bin/sh
""":"
echo called by bash
exec python $0 ${1+"$@"}
"""
import sys
print 'called by python, args:',sys.argv[1:]
答案 0 :(得分:2)
那很聪明! 在Bash 中,""":"
将仅展开为:
,这是空命令(它不做任何事情)。因此,接下来的几行将被执行,导致exec
。此时,Bash 不再存在,并且Python重新读取该文件(其名称为$0
),并转发原始参数。
${1+"$@"}
表示:如果定义了$1
,则传递参数"$@"
,这是原始的Bash脚本参数。如果没有定义$1
,意味着Bash没有参数,结果是空的,所以没有传递任何其他内容,甚至没有空字符串。
在Python 中,"""
启动一个多行字符串,其中包含Bash命令,并一直延伸到结束"""
。所以Python会跳到下面。
答案 1 :(得分:1)
这是polyglot的示例,您可以在文件中编写多种编程语言并使其有效。
如何在python中有效
""":"
echo called by bash
exec python $0 ${1+"$@"}
"""
这是python中的多行文档字符串,所以python完全忽略它直到import
行
如何在bash中有效
""":"
echo called by bash
exec python $0 ${1+"$@"}
exec
使用python解释器调用相同的脚本并退出脚本。所以它不会执行剩余的语法错误的python语句。
答案 2 :(得分:0)
What is the purpose of the : (colon) GNU Bash builtin?
此外,一旦调用了exec,其余代码就不会被执行,因为exec用程序替换了shell,在本例中是python进程。 (http://wiki.bash-hackers.org/commands/builtin/exec)