This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: basename(1) defect


ericblake@comcast.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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]