Not quite - if basename begins with one or more slashes that could still cause 
incorrect behavior.



The closest would be echo ${dirname%/}/${basename##*(/)} with the bash extglob 
option enabled.



---- On Wed, 05 Jun 2019 12:58:02 -0700 Stephane Chazelas 
<[email protected]> wrote ----


2019-06-05 12:01:33 -0700, Jefferson Carpenter: 
> Unlike path separation via basename and dirname, there is no 
> utility to concatenate paths.  The naive bash implementation: 
> 
> 
> 
>     "${basename}/${dirname}" 
> 
> 
> 
> is not correct in the case that the basename is "//" (// -> 
> ///), OR if basename is "/" and dirname does not begin with a 
> slash (/ -> //).  
> (see 
> http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_271:
>  
> "Multiple successive <slash> characters are considered to be 
> the same as one <slash>, except for the case of exactly two 
> leading <slash> characters.") 
[...] 
 
Is ${dirname%/}/$basename not enough? (here reversing dirname 
and basename so they have their more usual meaning). 
 
-- 
Stephane

Reply via email to