Task

Create a variable with a user-defined name.

The variable name should not be written in the program text, but should be taken from the user dynamically.



See also
   Eval in environment is a similar task.


 
# syntax: GAWK -f DYNAMIC_VARIABLE_NAMES.AWK
# Variables created in GAWK's internal SYMTAB (symbol table) can only be accessed via SYMTAB[name]
BEGIN {
    PROCINFO["sorted_in"] = "@ind_str_asc"
    show_symbol_table()
    while (1) {
      printf("enter variable name? ")
      getline v_name
      if (v_name in SYMTAB) {
        printf("name already exists with a value of '%s'\n",SYMTAB[v_name])
        continue
      }
      if (v_name ~ /^$/) {
        printf("name is null\n")
        continue
      }
      if (v_name !~ /^[A-Za-z][A-Za-z0-9_]*$/) {
        printf("name illegally constructed\n")
        continue
      }
      break
    }
    printf("enter value? ")
    getline v_value
    SYMTAB[v_name] = v_value
    printf("variable '%s' has been created and assigned the value '%s'\n\n",v_name,v_value)
    show_symbol_table()
    exit(0)
}
function show_symbol_table(  count,i) {
    for (i in SYMTAB) {
      printf("%s ",i)
      if (isarray(SYMTAB[i])) { count++ }
    }
    printf("\nsymbol table contains %d names of which %d are arrays\n\n",length(SYMTAB),count)
}
 