【发布时间】:2015-07-02 06:44:10
【问题描述】:
由于某种原因,我不知道如何在 bash 中测试真相:
#!/bin/bash
FORCE_DELETE=""
BE_VERBOSE=""
OPTIND=1
while getopts ":fv" FLAG "$@" ; do
if [[ "$FLAG" == "f" ]] ; then
FORCE_DELETE="true"
fi
if [[ "$VALUE" == "v" ]] ; then
BE_VERBOSE="true"
fi
if [[ "$FLAG" == "?" ]] ; then
echo "Usage: $0 [-fv] file ..."
exit 1
fi
done
shift `expr $OPTIND - 1`
if [[ "$FORCE_DELETE" == "true" && "BE_VERBOSE" == "true" ]] ; then
echo "FORCE_DELETE AND BE_VERBOSE $@"
elif [[ "$FORCE_DELETE" == "true" ]] ; then
echo "FORCE_DELETE $@"
elif [[ "$BE_VERBOSE" == "true" ]] ; then
echo "BE_VERBOSE $@"
else
echo "$@"
fi
exit 0
成绩单:
$ test a b
a b
$ test -f a b
FORCE_DELETE a b
$ test -v a b
a b
$ test -fv a b
FORCE_DELETE a b
为什么我的 bash 脚本响应 -f 标志而不响应 -v 标志?
【问题讨论】:
-
您在第一个
if中缺少BE_VERBOSE之前的$。 -
是错字吗?
[[ "$VALUE" == "v" ]],这不应该是[[ "$FLAG" == "v" ]] -
@CarlNorum 其实iamauser的评论更贴切。
-
所有问题都只是小错别字,这个问题应该直接关闭。
-
啊,太尴尬了……测试后会修正错别字和编辑问题。