- Не используйте
()
за именами функций в bash, если вы не хотите их определять.
- используйте
[23]
в случае совпадения 2
или 3
- случаи статических строк должны быть заключены в
''
вместо ""
Если заключено в ""
, интерпретатор (без необходимости) пытается расширить возможные переменные в значении перед сопоставлением.
case "$C" in
'1')
do_this
;;
[23])
do_what_you_are_supposed_to_do
;;
*)
do_nothing
;;
esac
Для сопоставления без учета регистра вы можете использовать классы символов (например, [23]
):
case "$C" in
# will match C='Abra' and C='abra'
[Aa]'bra')
do_mysterious_things
;;
# will match all letter cases at any char like `abra`, `ABRA` or `AbRa`
[Aa][Bb][Rr][Aa])
do_wild_mysterious_things
;;
esac
Но abra
ни разу не попал, потому что это будет соответствовать первому случаю.
При необходимости вы можете опустить ;;
в первом случае, чтобы продолжить тестирование на совпадения и в следующих случаях. (;;
переходит на esac
)