These bugs affect the development branch only. 1. `wait -n' doesn't work inside nofork command substitution. I think it should, or wait without `-n' shouldn't work either, or what works and what doesn't should be documented.
$ sleep 3 & sleep 1; echo ${| wait -n -p REPLY;} [1] 433 $ [1]+ Done sleep 3 $ 2. Sending a signal other than SIGTERM to an asynchronous process created inside nofork command substitution kills the parent shell. This should not happen. $ trap uname EXIT $ : ${ dd if=/dev/zero of=/dev/null &}; sleep 1; kill -USR1 % 4730333+0 records in 4730333+0 records out 2421930496 bytes (2.4 GB, 2.3 GiB) copied, 1.00056 s, 2.4 GB/s Linux User defined signal 1 $ There are other cases where the parent shell exits unexpectedly, such as when the exec command fails inside nofork command substitution, but I'm not sure if those are bugs or intended behavior. 3. Linking REPLY to a variable inside nofork command substitution renders the target variable unset. I don't think this should be the case; and if it has to, it should be documented. $ x=y $ echo ${| declare -n REPLY=x;} y $ declare -p x bash: declare: x: not found $