[-- Attachment #1: Type: text/plain, Size: 1078 bytes --] Is there a ZSH standard way to collapse a file path to its shortest representation that would be idempotent per Chapter 14.7? For example, one might echo "$filepath" | sed -E "s|$HOME/?|~/|" echo "$filepath" | sed -E "s|$HOME/?|\$HOME/|" In order to turn /home/username/bar/baz → ~/bar/baz /home/username/bar/baz → $HOME/bar/baz To achieve this effect. From the documentation, "14.7 Filename Expansion" has a lot of ways that paths can be expanded, including... 14.7.2 ... the path is checked to see if it has a named directory as its prefix. If so, then the prefix portion is replaced with a ‘~’ followed by the name of the directory .... Is there a standardized way to access this expansion with e.g. /path/to/somedir → ~SOMEDIR/foo? I expect this can be implemented manually by parsing the output of "hash -d" or similar, but I figured it was worth asking if there's an easy interface to this. I'm not concerned as much about "14.7.1 Dynamic named directories" but for completeness it would be neat. *Zach Riggle* [-- Attachment #2: Type: text/html, Size: 2197 bytes --]
On 5/13/22, Zach Riggle <zachriggle@gmail.com> wrote:
> Is there a ZSH standard way to collapse a file path to its shortest
> representation that would be idempotent per Chapter 14.7?
>
> For example, one might
>
> echo "$filepath" | sed -E "s|$HOME/?|~/|"
> echo "$filepath" | sed -E "s|$HOME/?|\$HOME/|"
>
>
> In order to turn
>
> /home/username/bar/baz → ~/bar/baz
> /home/username/bar/baz → $HOME/bar/baz
>
>
> To achieve this effect.
>
> From the documentation, "14.7 Filename Expansion" has a lot of ways that
> paths can be expanded, including...
>
> 14.7.2
> ... the path is checked to see if it has a named directory as its prefix.
> If so, then the prefix portion is replaced with a ‘~’ followed by the name
> of the directory ....
>
>
> Is there a standardized way to access this expansion with e.g.
> /path/to/somedir → ~SOMEDIR/foo?
The D parameter expansion flag does this.
--
Mikael Magnusson
[-- Attachment #1: Type: text/plain, Size: 1270 bytes --] Thanks! It does indeed. Is there a way to specify appearance? ~ENV vs $ENV ~SOME_ENV_VAR/foo/bar $SOME_ENV_VAR/foo/bar *Zach Riggle* On Fri, May 13, 2022 at 1:03 PM Mikael Magnusson <mikachu@gmail.com> wrote: > On 5/13/22, Zach Riggle <zachriggle@gmail.com> wrote: > > Is there a ZSH standard way to collapse a file path to its shortest > > representation that would be idempotent per Chapter 14.7? > > > > For example, one might > > > > echo "$filepath" | sed -E "s|$HOME/?|~/|" > > echo "$filepath" | sed -E "s|$HOME/?|\$HOME/|" > > > > > > In order to turn > > > > /home/username/bar/baz → ~/bar/baz > > /home/username/bar/baz → $HOME/bar/baz > > > > > > To achieve this effect. > > > > From the documentation, "14.7 Filename Expansion" has a lot of ways that > > paths can be expanded, including... > > > > 14.7.2 > > ... the path is checked to see if it has a named directory as its prefix. > > If so, then the prefix portion is replaced with a ‘~’ followed by the > name > > of the directory .... > > > > > > Is there a standardized way to access this expansion with e.g. > > /path/to/somedir → ~SOMEDIR/foo? > > The D parameter expansion flag does this. > > -- > Mikael Magnusson > [-- Attachment #2: Type: text/html, Size: 2049 bytes --]