0

我正在调试一个sh脚本。这些代码行的行为是什么?

SOME_VAR=$(env)

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

+x在这种情况下是什么意思?事实证明,代码可以正常工作bash,但不能正常工作sh

编辑:我正在部署一个 Eclipse Che 本地实例,就像这里解释的那样。

我安装了 .sh 脚本的 Eclipse Che 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 中起作用,那会是什么问题?

4

2 回答 2

2

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

由于SOME_VAR在上一行设置,它将始终扩展为x. 这使得该if语句无关紧要,因为代码将始终输出SOMETHING HAPPENED.

于 2016-08-25T00:02:46.960 回答
1

它是一种参数替换形式,如果设置则将产生x,如果SOME_VAR未设置则产生空字符串。

您可以在此处了解有关不同类型的参数替换的更多信息。

于 2016-08-25T00:02:03.317 回答