有条件的在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 

但是shellcheck通过显示以下结果来抱怨。 任何想法? https://github.com/koalaman/shellcheck/wiki/SC1089

首先构build参数列表(在一个数组中), 然后调用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[@]}" 

不过,主要的想法是保持条件代码尽可能小,并将其与无条件代码分开。

我build议使用$(if ..; then ...; fi)

 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)