On Fri, Sep 16, 2016 at 03:22:29PM -0400, Greg Wooledge wrote:
> Off hand I'd say the bash 4.4 behavior is correct.  * matches 0 or
> more characters, so it should match an empty or undefined variable.

Yes, I agree that the Bash 4.4 behavior is more reasonable, but I think
the change at least needs to be documented (assuming I didn't miss it).

> > Fix:
> >     As a work-around, I have changed the expressions I'm using from
> >     ${VAR/*/...} to ${VAR/?*/...}.
>
> That, or ${VAR:+not empty} which is how I suggest testing for variable
> set-and-not-empty-ness.

I'm aware of that construct, but that doesn't do what I want unless I'm
missing something; I don't want to change the value of the variable.
Here's an example from my prompt command:

    function prompt-command()
    {
        # [...]

        local jobs="$(jobs)"

        # [...]

        PS1="${SSH_TTY/?*/\\u@\\h:}\\W${jobs/?*/ [\\j]}\\$ "

        # [...]
    }

In this example, I want to show the username and hostname if SSH_TTY is
set and not empty, but I do not want to modify its value. I am also
showing the number of jobs in brackets, but I only want to do that if
there are some jobs in the background.

Eric

Reply via email to