2016-06-28 36 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'之間的空格變成換行符,但是使用'「@ @」',您可以正確保存所有內容進入。 –