Bash中Docker参数中的条件

Bash中Docker参数中的条件,bash,docker,Bash,Docker,在我的bash文件中有这样的内容 docker run -d \ --network=host \ --name my-service \ --log-driver="$LOGGING" \ if [[ "$LOGGING" == 'splunk' ]]; then echo "--log-opt tag={{.ImageName}}/{{.Name}}/{{.ID}} \\"; echo "--log-opt env=NODE_ENV \\"; fi 但是

在我的bash文件中有这样的内容

docker run -d \
  --network=host \
  --name my-service \
  --log-driver="$LOGGING" \
  if [[ "$LOGGING" == 'splunk' ]]; then
    echo "--log-opt tag={{.ImageName}}/{{.Name}}/{{.ID}} \\";
    echo "--log-opt env=NODE_ENV \\";
  fi
但是shellcheck通过显示以下结果进行投诉。有什么想法吗? 我建议使用
$(如果…;那么…;fi)

我建议使用
$(如果…;那么…;fi)


首先构建参数列表(在数组中),然后调用
docker
。这还有一个额外的好处,就是去掉了难看的行连续字符

docker_opts=(
    -d
    --network=host
    --name my-service
    --log-driver="$LOGGING"
    --log-opt="$log_opt"
)

if [[ $LOGGING == splunk ]]; then
    docker_opts+=(
        --log-opt "tag={{.ImageName}}/{{.Name}}/{{.ID}} \\"
        --log-opt "env=NODE_ENV \\"
    )
fi

docker run "${docker_opts[@]}"

不过,其主要思想是使条件代码尽可能小,并将其与无条件代码分开。

首先构建参数列表(在数组中),然后调用
docker
。这还有一个额外的好处,就是去掉了难看的行连续字符

docker_opts=(
    -d
    --network=host
    --name my-service
    --log-driver="$LOGGING"
    --log-opt="$log_opt"
)

if [[ $LOGGING == splunk ]]; then
    docker_opts+=(
        --log-opt "tag={{.ImageName}}/{{.Name}}/{{.ID}} \\"
        --log-opt "env=NODE_ENV \\"
    )
fi

docker run "${docker_opts[@]}"

不过,其主要思想是尽可能使条件代码小,并将其与无条件代码分开。

这种方法也不起作用,因为它创建了一个docker运行命令,如果if为false,则不会添加任何后续命令。我的意思是该命令应该附加图像的名称。@Mazzy:您测试过吗?这种方法也不起作用,因为它创建了一个docker运行命令,如果if为false,则不会添加任何后续命令。我的意思是,该命令应该附加图像的名称。@Mazzy:您测试过了吗?docker命令的目的是使这两个
--log opt
标志存在还是不存在?是的,正确。docker命令的目的是使您具有或不具有这两个
--log opt
标志?是正确的。它是