X-Spam-Check-By: sourceware.org Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Subject: RE: basename(1) defect Date: Fri, 25 Nov 2005 08:33:50 -0500 Message-ID: <31DDB7BE4BF41D4888D41709C476B6570246A827@NIHCESMLBX5.nih.gov> From: "Buchbinder, Barry \(NIH/NIAID\)" To: Cc: "Stan Tsu" X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by delorie.com id jAPDXxo5018468 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/