I don’t know of a way to do this, however you may be able to accomplish what you’re trying to do using:
somecommand | while read -r; do echo "Something with $REPLY"; done
This will also be faster, as you won’t be creating a new process for each line of text.
[EDIT 2009-07-09]
I’ve made two changes:
- Incorporated litb’s suggestion of using
-rto disable backslash processing — this means that backslashes in the input will be passed through unchanged. - Instead of supplying a variable name (such as
X) as a parameter toread, we letreadassign to its default variable,REPLY. This has the pleasant side-effect of preserving leading and trailing spaces, which are stripped otherwise (even though internal spaces are preserved).
From my observations, together these changes preserve everything except literal NUL (ASCII 0) characters on each input line.
[EDIT 26/7/2016]
According to commenter Evi1M4chine, setting $IFS to the empty string before running read X (e.g., with the command IFS='' read X) should also preserve spaces at the beginning and end when storing the result into $X, meaning you aren’t forced to use $REPLY.