我不知道shell脚本。任何人都可以解释这是什么意思?
exec python2.7.1 "${BASEDIR}/../foo/foo.py" ${1+"[email protected]"}
我认为这将执行foo文件夹内的foo.py文件。但是,${1+"[email protected]"}
是什么意思?
我不知道shell脚本。任何人都可以解释这是什么意思?
exec python2.7.1 "${BASEDIR}/../foo/foo.py" ${1+"[email protected]"}
我认为这将执行foo文件夹内的foo.py文件。但是,${1+"[email protected]"}
是什么意思?
[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]
,否则不通过。”
'$ {... + ...}'是[备用值语法](http://www.tldp.org/LDP/abs/html/parameter-substitution.html#PARAMALTV)。如果没有给出参数,它传递一个空字符串。 –
更新了我的答案,谢谢@Wander! –
'echo $ @'是非常糟糕的做法 - 考虑'printf'%s \ n'$ @'vs'printf'%s \ n'“$ @”'有任何有趣的内容(比如'set - 'hello ''*'“残酷的世界”',将'$ @'设置为一个具有空格和水平字符的值)来展示原因:没有引号,shell字符串在将它们传递之前拆分并全局扩展内容。因此,使用'$ @'可以获得当前目录中所有文件名的列表,并且'cruel'和'world'之间的空格变成换行符,但是使用'“@ @”',您可以正确保存所有内容进入。 –
我想不出任何令人信服的理由来使用它,而不仅仅是“$ @”'。 –