2016-06-28 149 views
0

我不知道shell脚本。任何人都可以解释这是什么意思?

exec python2.7.1 "${BASEDIR}/../foo/foo.py" ${1+"[email protected]"} 

我认为这将执行foo文件夹内的foo.py文件。但是,${1+"[email protected]"}是什么意思?

+2

我想不出任何令人信服的理由来使用它,而不仅仅是“$ @”'。 –

回答

0

[email protected]是shell用来处理脚本命令行参数的内建变量之一。在该脚本:

$0是推出的脚本

$1是第一个参数

$2是第二个参数,等等命令

$*是所有参数列表包括启动脚本的命令

[email protected]是不包含命令t的所有参数的列表帽子发起剧本。所以,如果整个命令是:

myscript.sh glorf frolg flerg 

然后echo [email protected]会响应:

glorf frolg flerg 

我不知道该$ {1 ...}的事情是什么。它似乎没有改变行为。它仍然只是呼应[email protected]。基本上你的脚本所做的就是将所有参数传递给foo.py.

好的,谢谢@Wander Nauta。看看here,你可以看到${1+"[email protected]"}的意思是“如果$1存在,则通过[email protected],否则不通过。”

+2

'$ {... + ...}'是[备用值语法](http://www.tldp.org/LDP/abs/html/parameter-substitution.html#PARAMALTV)。如果没有给出参数,它传递一个空字符串。 –

+1

更新了我的答案,谢谢@Wander! –

+0

'echo $ @'是非常糟糕的做法 - 考虑'printf'%s \ n'$ @'vs'printf'%s \ n'“$ @”'有任何有趣的内容(比如'set - 'hello ''*'“残酷的世界”',将'$ @'设置为一个具有空格和水平字符的值)来展示原因:没有引号,shell字符串在将它们传递之前拆分并全局扩展内容。因此,使用'$ @'可以获得当前目录中所有文件名的列表,并且'cruel'和'world'之间的空格变成换行符,但是使用'“@ @”',您可以正确保存所有内容进入。 –