$ {SOME_VAR + x}的行为是什么?它可能在.sh文件中失败吗?

时间:2016-08-24 23:55:11

标签: bash sh eclipse-che

我正在调试SOME_VAR=$(env) if [ ! -z ${SOME_VAR+x} ]; then echo "SOMETHING HAPPENED " fi 脚本。这些代码行的行为是什么?

+x

bash在这种情况下的含义是什么?事实证明,代码适用于sh,但没有使用$ curl -sL https://raw.githubusercontent.com/eclipse/che/master/che.sh > /usr/local/bin/che $ chmod +x /usr/local/bin/che

编辑:我正在使用Eclipse Che本地实例的部署,就像它解释here一样。

我安装了Eclipse Che CLI,它是一个.sh脚本:

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

脚本在这里失败:

{{1}}

有些东西不起作用。如果你说替换也应该在.sh中工作,那会是什么问题?

2 个答案:

答案 0 :(得分:2)

如果未设置$(".menu").click(function( event ) { event.preventDefault(); if ( !$( this ).hasClass("isDown") ) { $(".menu-container").css("display", "block"); $(".menu-container") .animate({ "height": "5%" }, 200 ) .animate({ "height": "2%" }, 200 ) .animate({ "height": "8%" }, 200 ) .animate({ "height": "100%" }, 1000 ); } else { $(".menu-container") .animate({ "height": "50%" }, 600 ) .animate({ "height": "65%" }, 200 ) .animate({ "height": "40%" }, 200 ) .animate({ "height": "0%" }, 400, function() { $( this ).css("display", "none"); }); } // use this class as indecator if menu open or not $( this ).toggleClass("isDown"); return false; }); ,则

${SOME_VAR+x}会扩展为空字符串。如果已设置(甚至是空字符串),则会扩展为SOME_VAR

由于在前一行设置了x,因此总是扩展为SOME_VAR。这使得x语句无关紧要,因为代码将始终输出if

答案 1 :(得分:1)

这是一种参数替换形式,如果设置了SOME_VAR,将产生angles = [0, 18, 36, 54, 72, 90] colors = ['r','g','b','c'] x = [....] y = [....] ,如果不是,则产生空字符串。

您可以详细了解不同类型的参数替换here