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

Dzi*_*mid 5 bash scripting

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

#!/bin/bash

/usr/local/bin/mongo-connector \
  -m $MONGO_HOST \
  -t $NEO_URI \
  [if $VERBOSE then -v ] \
  -stdout
Run Code Online (Sandbox Code Playgroud)

Wil*_*ell 12

#!/bin/bash

/usr/local/bin/mongo-connector \
  -m $MONGO_HOST \
  -t $NEO_URI \
  ${VERBOSE:+-v} \
  -stdout
Run Code Online (Sandbox Code Playgroud)

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

  • 如果要检查特定值,则需要编写一些明确的比较.例如,`case`陈述.没有简单的捷径. (2认同)

che*_*ner 10

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

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