tokname() { local t="${1}" shift 1 local n= case "${t%${US}*}" in # Operators T_EOF) n='end of file';; T_NEWLINE) n='newline';; T_AND) n='&';; T_SEMI) n=';';; T_AND_IF) n='&&';; T_OR_IF) n='||';; T_DSEMI) n=';;';; T_LESS) n='<';; T_GREAT) n='>';; T_DLESS) n='<<';; T_DGREAT) n='>>';; T_LESS) n='<';; T_LESSAND) n='<&';; T_GREAT) n='>';; T_GREATAND) n='>&';; T_LESSGREAT) n='<>';; T_DLESSDASH) n='<<-';; T_CLOBBER) n='>|';; T_PIPE) n='|';; T_LPAREN) n='(';; T_RPAREN) n=')';; # Reserved words T_IF) n='if';; T_THEN) n='then';; T_ELSE) n='else';; T_ELIF) n='elif';; T_FI) n='fi';; T_DO) n='do';; T_DONE) n='done';; T_CASE) n='case';; T_ESAC) n='esac';; T_WHILE) n='while';; T_UNTIL) n='until';; T_FOR) n='for';; T_LBRACE) n='{';; T_RBRACE) n='}';; T_BANG) n='!';; T_IN) n='in';; # Special symbols T_NAME) n='parameter name';; T_FNAME) n='function name';; T_CMDNAME) n='command name';; T_IO_NUMBER) n='I/O number';; T_WORD) n='word';; T_ASSIGNMENT_WORD) n='assignment word';; # Unknown *) n='unknown token';; esac printf '%s' "${n}" }