В действительности вы МОЖЕТЕ сопоставить переменную или функцию.Это только неявное сокращение, где RE предназначено для соответствия всей строке, где нет механизма для встраивания переменной в большее RE.Таким образом, вы можете захотеть быть EXplicit и использовать оператор RE, ~
.
. Для вашего примера я бы выбрал что-то вроде этого:
$ pat1="[[][gG][lL][oO][bB][aA][lL][]]"
$ awk -v pat1="$pat1" 'BEGIN{re="^[[:space:]]*" pat1 "[[:space:]]*$"} f; $0~re{f=1}' file.cfg
Или даже,
$ awk -v pat1="$pat1" 'f; $0~sprintf("^[[:space:]]*%s[[:space:]]*$",pat1) {f=1}' file.cfg
Я мог бы даже еще больше упростить использование этой вещи, избавив вас от хлопот, связанных с передачей без учета регистра:
$ pat1="global"
$ awk -v pat1="$pat1" 'f; tolower($0) ~ sprintf("^[[:space:]]*[[]%s[]][[:space:]]*$",tolower(pat1)) {f=1}' file.cfg