我想在我的bash脚本中运行一个命令,有或没有-v
标志,具体取决于是否定义了环境变量$ VERBOSE。像这样:
#!/bin/bash
/usr/local/bin/mongo-connector \
-m $MONGO_HOST \
-t $NEO_URI \
[if $VERBOSE then -v ] \
-stdout
答案 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')