Вы можете построить строку с текстом функции, затем eval
строку:
function make_dynamic_functions
{
func="function fast_multiregex_check"
func="$func {"
for i in 123410[0-9]* 123430[0-9]* 1235[89][0-9]{0,5} 1237[89][0-9]{8,} 1235551[0-9]*
do
func="$func; if [[ \$1 =~ ^$i\$ ]]; then"
func="$func echo $i;"
func="$func exit;"
func="$func fi;"
done
func="$func }"
eval "$func"
}
Альтернативный механизм - захватить вывод различных команд echo
с помощью func=$( ...echos... )
а затем eval
эта строка.Хитрость при построении строки состоит в том, чтобы убедиться, что точки с запятой находятся во всех нужных местах - это, вероятно, проще с командами echo
, но вы должны не забывать заключать в кавычки значение, переданное в eval
, чтобы сохранить внутренние*. переводы строк 1010 *