A few issues inspired by the coproc proposal in this thread: http://lists.gnu.org/archive/html/bug-bash/2016-04/msg00050.html
1. coproc unsets readonly NAME after the process completes $ declare -p UID; coproc UID { :; }; wait; declare -p UID declare -ir UID="501" bash: UID: readonly variable bash: UID: readonly variable [1] 60652 [1]+ Done coproc UID { :; } bash: declare: UID: not found 2. Segfault if NAME is an existing associative array $ declare -A A; coproc A { :; } 0 bash 0x0000000100e61075 hash_search + 53 (hashlib.c:141) 1 bash 0x0000000100e6bf74 assoc_insert + 36 (assoc.c:77) 2 bash 0x0000000100e6a8a7 bind_array_var_internal + 87 (arrayfunc.c:183) 3 bash 0x0000000100e34619 coproc_setvars + 121 (execute_cmd.c:2173) 4 bash 0x0000000100e2fb52 execute_command_internal + 738 (execute_cmd.c:2281) 5 bash 0x0000000100e30e07 execute_command_internal + 5527 (execute_cmd.c:2562) 6 bash 0x0000000100e2f809 execute_command + 137 (execute_cmd.c:405) 7 bash 0x0000000100e1c986 reader_loop + 662 (eval.c:180) 8 bash 0x0000000100e1bc15 main + 6709 (shell.c:610) 3. If NAME is $,?,@, etc, bash will create a new array variable with that name. This zeroth index of this array variable will then take precedence over the real variable in some contexts $ echo ${@:0}; coproc @ { sleep 1; }; echo ${@:0} -bash [1] 72037 61