$NAME != "q" || $NAME != "Q"
Если NAME
не может существовать в странном состоянии типа "кота Шредингера", где оно может быть одновременно Q
и q
, это выражение будет всегда быть правдой.
Подумайте об этом:
- Если
NAME
равно , то ни q
, ни Q
, обавыражения будут истинными, поэтому полное выражение будет истинным. - Если это
Q
, то первые подвыражения будут истинными, что также приведет к полному выражению, являющемуся истинным. - Если это
q
, то вторые подвыражения будут истинными, что приведет к тому, что полное выражение также будет истинным.
То, что вам вероятно нужно, это:
$NAME != "q" && $NAME != "Q"
Конечно, если вы используете bash
, он предоставляет способ в верхнем и нижнем регистре строки, чтобы облегчить эти сравнения:
while [[ "${NAME^^}" != "Q" ]] ; # upper-case variant
while [[ "${NAME,,}" != "q" ]] ; # lower-case variant