Skip to content

read -n ignores -d #993

Description

@stephane-chazelas
$ printf 'x\ny:' | ksh -c 'IFS= read -rd : -n2 a; printf "<%s>\n" "$a"'
<x>

That still reads 2 bytes off a line, a newline-delimited record, not a : delimited record here.

I know that's how it's currently documented, but that's less useful and I don't expect changing that would break backward compatibility (you wouldn't use -d and still expect line-oriented input).

A few shells have copied ksh93's -n and -d and all read those bytes (characters in the case of bash) up to the delimiter specified with -d:

$ printf 'x\ny:' | bash -c 'IFS= read -rd : -n2 a; printf "<%s>\n" "$a"'
<x
>
$ printf 'x\ny:' | mksh -c 'IFS= read -rd : -n2 a; printf "<%s>\n" "$a"'
<x
>
$ printf 'x\ny:' | busybox sh -c 'IFS= read -rd : -n2 a; printf "<%s>\n" "$a"'
<x
>

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething is not working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions