2016-08-24 80 views
0

我在調試sh腳本。這些代碼行是什麼?

SOME_VAR=$(env) 

if [ ! -z ${SOME_VAR+x} ]; then 
    echo "SOMETHING HAPPENED " 
fi 

+x在這種情況下的含義是什麼?事實證明,代碼適用於bash,但沒有與sh

編輯:我正在部署一個Eclipse Che本地實例,就像它被解釋爲here一樣。

我安裝了Eclipse車CLI是一個.SH腳本:

$ curl -sL https://raw.githubusercontent.com/eclipse/che/master/che.sh > /usr/local/bin/che 
$ chmod +x /usr/local/bin/che 

爲了使它工作,我需要使用bash運行它

$ bash che start 

如果我調試腳本。 ..

$ sh -x che start 

,腳本將無法在這裏:

get_list_of_che_system_environment_variables() { 

    [...] 

    if [ ! -z ${CHE_VARIABLES+x} ]; then 
     env | grep CHE_ >> $DOCKER_ENV 
     RETURN=$DOCKER_ENV 
    fi 

東西不行。如果你說替換也應該在.sh中工作,那麼問題是什麼?

+3

代碼應該在任何POSIX兼容的shell中以相同的方式工作。 – chepner

+0

什麼意思是代碼不能用'sh'工作?所有的命令都在'sh'中有效。 – 2016-08-25 01:17:36

+0

@redmm我編輯了我的問題,告訴你可能是什麼問題 – JonDoe297

回答

1

它是一種參數替換形式,如果設置了SOME_VAR,將產生x;如果不是,則爲空字符串。

你可以瞭解更多關於不同類型的參數替代here

2

${SOME_VAR+x}如果沒有設置SOME_VAR,則展開爲空字符串。如果它被設置(即使是空字符串),它將擴展到x

由於SOME_VAR設置在上一行,因此將總是擴展爲x。這使if語句不相關,因爲代碼將始終輸出SOMETHING HAPPENED

相關問題