On Sat, Apr 1, 2023, at 9:27 PM, Kerin Millar wrote:
> On Sat, 1 Apr 2023 19:44:10 -0400
> Saint Michael <vene...@gmail.com> wrote:
>
>> There is an additional problem with IFS and the command read
>> 
>> Suppose I have variable  $line with a string "a,b,c,d"
>> IFS=',' read -r x1 <<< $line
>> Bash will assign the whole line to x1
>>  echo $x1
>> line="a,b,c,d";IFS=',' read -r x1 <<< $line;echo $x1;
>> a,b,c,d
>> but if I use two variables
>> line="a,b,c,d";IFS=',' read -r x1 x2 <<< $line;echo "$x1 ---> $x2";
>> a ---> b,c,d
>> this is incorrect. If IFS=",", then a read -r statement must assign the
>
> No it isn't.
>
>> first value to the single variable, and disregard the rest.
>
> No it musn't. Read 
> https://pubs.opengroup.org/onlinepubs/9699919799/utilities/read.html 
> and pay particular attention to the definition of what must happen 
> where there are fewer vars (names) than fields encountered.

Also, observe the behavior of other shells:

        % cat foo.sh
        echo a,b,c,d | {
            IFS=, read x1
            printf '%s\n' "$x1"
        }

        echo a,b,c,d | {
            IFS=, read x1 x2
            printf '%s ---> %s\n' "$x1" "$x2"
        }

        % bash foo.sh
        a,b,c,d
        a ---> b,c,d
        % dash foo.sh
        a,b,c,d
        a ---> b,c,d
        % ksh foo.sh
        a,b,c,d
        a ---> b,c,d
        % mksh foo.sh
        a,b,c,d
        a ---> b,c,d
        % yash foo.sh
        a,b,c,d
        a ---> b,c,d
        % zsh foo.sh
        a,b,c,d
        a ---> b,c,d

And the Heirloom Bourne shell:

        <larryv>        b# echo a,b,c,d | { IFS=, read x1; printf '%s\n' "$x1"; 
}; echo a,b,c,d | { IFS=, read x1 x2; printf '%s ---> %s\n' "$x1" "$x2"; }
        <shbot> a,b,c,d
        <shbot> a ---> b,c,d

-- 
vq

Reply via email to