2016-08-24 11 views
0

shスクリプトをデバッグしています。これらのコード行の動作は何ですか?

SOME_VAR=$(env) 

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

この場合、+xはどういう意味ですか?コードはbashで正常に動作しますが、shでは正しく動作しません。

EDIT:私は、Eclipse Cheローカルインスタンスのデプロイメントには、hereのように取り組んでいます。

私は.SHスクリプトであるEclipseのチェCLIをインストール:

$ 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互換のシェルでも同じに動作します。 – chepner

+0

「sh」ではコードが機能しないのはどういう意味ですか?すべてのコマンドは 'sh'で有効です。 –

+0

@redmm私は自分の質問を編集して、問題の可能性があることを示しました – JonDoe297

答えて

1

SOME_VARが設定されている場合は、xが返されるパラメータ置換の形式です。そうでない場合はnull文字列です。

異なるタイプのパラメータ置換については、hereを参照してください。

2

${SOME_VAR+x}SOME_VARが設定されていない場合は空の文字列に展開されます。これが設定されている場合(空の文字列まで)は、xに展開されます。

前の行にSOME_VARが設定されているため、は常にに、xに展開されます。これにより、コードは常にSOMETHING HAPPENEDとして出力されるため、ifステートメントは無関係になります。

関連する問題