Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: ${var:1:1:=y}



On Feb 3, 2015, at 6:12 PM, Ray Andrews <rayandrews@xxxxxxxxxxx> wrote:

> We can of course do this:
> 
>    variable=${var:=xy}
> 
> I'm wanting the naive expansion of that syntax to do this:
> 
>    variable=${var:1:1:=y}
> 
> ... but it doesn't work. Can something like that be done?

(This is admittedly a non-answer, as I don't know whether there's a solution that's as succinct as you'd like.)

I would find that syntax (or something like it) very ambiguous. What would be assigned "y" in this case — `var`, or the slice of `var` that you were testing? Neither is obvious.


> At the moment I'm doing this:
> 
>    variable=${var:1:1}
>    [ -n "$variable" ] || variable=y
> 
> ... which is perfectly fine, but the above pseudosyntax would be elegant if it could be made workable.

Wouldn't testing the length of `variable` express your intent better?


> And I found something that puzzles me:
> 
> 
>   test ()
>   {
>      echo $1
>      echo ${1:0:1}
>      /bin/echo ${1:0:1}
>      echo ${1:1:1}
>      echo ${1:0:1}${1:1:1}
>      echo ${1:1:1}${1:0:1}
>   }
> 
>   $ test -a
> 
>   -a
>   [nothing]
>   -
>   a
>   -a
>   a-
> 
> ... If I entered a valid switchofcourse I'd expect that to be eaten
> but a solitary dash? Bug?  /bin/echo behaves as I'd expect.

Test cases should focus on the questionable behavior by discarding irrelevant details. Your case boils down to this:

    % echo -

    % /bin/echo -
    -
    %


vq


Messages sorted by: Reverse Date, Date, Thread, Author