Попытка сравнения с переменной против строк, я попытался код, согласно решению от https://unix.stackexchange.com/questions/67898/using-the-not-equal-operator-for-string-comparisonBash, если оператор с оператором И
if [ "$ACTION" != "dry" ] && [ "$ACTION" != "prune" ]
then
echo "Invalid"
fi
Это не работает для меня, я не получаю сообщения об ошибках, это как это просто пропускает блок кода.
Я также пробовал так, как в ответ здесь Bash if statement with multiple conditions
if [[ "$ACTION" != "dry" && "$ACTION" != "prune" ]]
then
echo "Invalid"
fi
Это перекликается «Invalid», если $ ACTION ничего, кроме «сухой», даже если его «подрезать»
Все предложения ?
EDIT
Полный код
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
@chepner объявляя действие выводит правильно 'объявить - ACTION = "чернослив"' Это устанавливается с помощью getopts, как это 'в то время как getopts "б: а:" вариант сделать случай "$ {опция}" в б) MERGE_BRANCH = $ {OPTARG} ;; a) ACTION = $ {OPTARG} ;; esac done' –
Это отгоняет «Недействительно», если $ ACTION - это что-то другое, кроме «сухого», даже если его «чернослив» → не для меня: он не печатает «Invalid», если «ACTION» равно «prune». – rom1v