Mail Archives: cygwin/2005/11/25/08:34:03
ericblake AT comcast DOT net wrote:
>>> This is a bug with basename 5.3.0 found in the latest Cygwin
>>> 1.5.15.1.
>
> Not a bug.
>
>>
>> 1.5.15 was three releases ago, it's most certainly not the latest.
>> But that's not really relevant to your question, I don't think.
>>
>>> $ basename NA A
>>> N
>>> $ basename N/A A
>>> A <====== should return 'N/'
>
> POSIX requires that basename return everything beyond the final slash
> onwards, minus a partial suffix. The output you got is REQUIRED by
> basename (beyond the final suffix is "A", and "A" is a complete match
> rather than a partial suffix of "A", so the result must be "A"), and
> any other behavior from an older version of basename would be the
> bug, not the current behavior of either basename-5.3.0 or
> basename-5.93.
>
>>>
>>> Even with quoting:
>>>
>>> $ basename 'NA' A
>>> N
>>> $ basename 'N/A' A
>>> A <====== should return 'N/'
>
> Quoting makes no difference - the shell strips quotes before passing
> the arguments to /bin/basename.
>
>>
>> If you just want to remove a trailing string I suggest you just use
>> bash's built in parameter expansion:
>>
>> $ FCF="N/A"; Z=${FCF:(-1)}; echo ${FCF%$Z}
>
> This could also be done by /bin/expr (if you like coreutils), or even
> with awk, sed, or perl. But Brian is correct, shell parameter
> expansion is the most efficient way to do string parsing, as it does
> not spawn any external processes.
>
> --
> Eric Blake
> volunteer cygwin bash/coreutils maintainer
Maybe you really want dirname.
/c> dirname N/A
N
/c> echo $(dirname N/A)/
N/
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
- Raw text -