shell: also do word splitting when -d DELIM is used
The original commit 3bef5d89b0
introduced an additional check
for an unset `opt_d` before doing word splitting. I'm unsure
why it's there in the first place, but the commit message also
describes a different behaviour than what -d actually does in
bash, while the code mostly does the right thing.
`opt_d` sets the line delimiter for read to stop reading and
should not affect word splitting.
Testcase:
$ echo qwe rty | { read -d Z a b; echo a:$a b:$b; }
a:qwe b:rty
function old new delta
shell_builtin_read 1314 1304 -10
Signed-off-by: Eicke Herbertz <wolletd@posteo.de>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
c0f8113f86
commit
1b30c63dfd
@ -230,7 +230,7 @@ shell_builtin_read(struct builtin_read_params *params)
|
|||||||
* without variable names (bash compat).
|
* without variable names (bash compat).
|
||||||
* Thus, "read" and "read REPLY" are not the same.
|
* Thus, "read" and "read REPLY" are not the same.
|
||||||
*/
|
*/
|
||||||
if (!params->opt_d && argv[0]) {
|
if (argv[0]) {
|
||||||
/* http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_05 */
|
/* http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_05 */
|
||||||
const char *is_ifs = strchr(ifs, c);
|
const char *is_ifs = strchr(ifs, c);
|
||||||
if (startword && is_ifs) {
|
if (startword && is_ifs) {
|
||||||
|
Loading…
Reference in New Issue
Block a user