【发布时间】:2017-02-03 14:13:33
【问题描述】:
尝试将变量与字符串进行比较,我根据https://unix.stackexchange.com/questions/67898/using-the-not-equal-operator-for-string-comparison的解决方案尝试了代码
if [ "$ACTION" != "dry" ] && [ "$ACTION" != "prune" ]
then
echo "Invalid"
fi
这对我不起作用,我没有收到任何错误消息,就像它只是跳过了代码块。
我也按照Bash if statement with multiple conditionsBash if statement with multiple conditions的答案尝试过这样的操作
if [[ "$ACTION" != "dry" && "$ACTION" != "prune" ]]
then
echo "Invalid"
fi
如果 $ACTION 不是“dry”,即使它是“prune”,这也会回显“Invalid”
有什么建议吗?
编辑
完整代码
OPTIND=1
while getopts "b:a:" option
do
case "${option}"
in
b) MERGE_BRANCH=${OPTARG};;
a) ACTION=${OPTARG};;
esac
done
if [[ "$ACTION" != "dry" && "$ACTION" != "prune" ]]
then
echo "Invalid"
fi
shift $((OPTIND-1))
[ "$1" = "--" ] && shift
(( 1 <= ${#} )) || { echo "missing mandatory argument" 2>&1 ; exit 1; };
【问题讨论】:
-
ACTION如何设置?declare -p ACTION的输出是什么?我怀疑该值有尾随空格(特别是回车)。 -
@chepner 声明动作输出正确
declare -- ACTION="prune"它是用这样的getopts 设置的while getopts "b:a:" option do case "${option}" in b) MERGE_BRANCH=${OPTARG};; a) ACTION=${OPTARG};; esac done -
如果 $ACTION 不是“dry”,即使它的“prune”→ 不适合我,它也会回显“Invalid”:如果
ACTION等于prune,它不会打印“Invalid” . -
@A.Jac 发布您运行的确切代码以获得您声明的输出,而不是假设您发布的有效代码会产生相同的问题。跨度>
-
用完整代码编辑了 OP
标签: bash if-statement and-operator