如何有条件地向shell脚本添加标志?

时间:2017-03-23 19:44:09

标签: bash scripting

我想在我的bash脚本中运行一个命令,有或没有-v标志,具体取决于是否定义了环境变量$ VERBOSE。像这样:

#!/bin/bash

/usr/local/bin/mongo-connector \
  -m $MONGO_HOST \
  -t $NEO_URI \
  [if $VERBOSE then -v ] \
  -stdout

3 个答案:

答案 0 :(得分:10)

#!/bin/bash

/usr/local/bin/mongo-connector \
  -m $MONGO_HOST \
  -t $NEO_URI \
  ${VERBOSE:+-v} \
  -stdout

如果设置了VERBOSE且非空,则${VERBOSE:+-v}计算为-v。如果VERBOSE未设置或为空,则计算为空字符串。请注意,这是一个必须避免使用双引号的实例。如果您编写:cmd "${VERBOSE:+-v}"而不是cmd ${VERBOSE+:v},则当VERBOSE为空或未设置时,行为在语义上是不同的。在前一种情况下,使用一个参数(空字符串)调用cmd,而在后一种情况下,使用零参数调用cmd

答案 1 :(得分:7)

为了便于阅读,请考虑使用数组来存储参数。

args=(
  -m "$MONGO_HOST"
  -t "$NEO_URI"
  -stdout
)
if [[ -v VERBOSE ]]; then
    args+=(-v)
fi
/usr/local/bin/mongo-connector "${args[@]}"

答案 2 :(得分:0)

这似乎可行:

composer dump-autoload $([ "$env" = "production" ] && printf '--classmap-authoritative')