有人能解释一下这个bash脚本是如何工作的吗?我不明白的部分是""":"
,这个语法在bash中是什么意思?你知道吗
#!/bin/sh
""":"
echo called by bash
exec python $0 ${1+"$@"}
"""
import sys
print 'called by python, args:',sys.argv[1:]
试运行结果:
$ ./callself.sh xx
called by bash
called by python, args: ['xx']
$ ./callself.sh
called by bash
called by python, args: []
What is the purpose of the : (colon) GNU Bash builtin?
另外,一旦调用exec,其余的代码就不会被执行,因为exec用程序(在本例中是python进程)替换shell。(http://wiki.bash-hackers.org/commands/builtin/exec)
这是polyglot的一个例子,在这个例子中,您在一个文件中编写了多种编程语言,但仍然使其有效。你知道吗
它在python中如何有效
这是python中的多行docstring,因此python完全忽略它直到
import
行它在bash中如何有效
exec
使用python解释器调用同一个脚本并退出该脚本。因此,它不会执行其余语法错误的python语句。你知道吗真聪明!在Bash中,
""":"
将只扩展为:
,这是空命令(它什么都不做)。因此,接下来的几行将被执行,导致exec
。此时,Bash不再存在,Python将重新读取该文件(其名称为$0
),并转发原始参数。你知道吗${1+"$@"}
意味着:如果定义了$1
,则传递为参数"$@"
,这是Bash脚本的原始参数。如果$1
没有定义,这意味着Bash没有参数,那么结果是空的,因此不会传递其他内容,甚至空字符串也不会传递。你知道吗在Python中,
"""
启动一个包含Bash命令的多行字符串,并一直扩展到结束的"""
。所以Python会跳到下面。你知道吗相关问题 更多 >
编程相关推荐