1

I've used the script below to grab the name of the current folder in bash:

${PWD##*/}

This is a trick I saw in this question. However, I don't actually understand what the syntax ##*/ means (except that */ probably means 'any characters up to a slash').

Can anyone explain it? And apologies in advance if this is a dumb question!

Dave Kerr
  • 5,117
  • 2
  • 29
  • 31
  • `##` means find longest match till you get `/` which matches last `/` in the `$PWD` – anubhava Dec 04 '17 at 07:57
  • 1
    Read up - [Bash Parameter-expansion - Substring removal](http://wiki.bash-hackers.org/syntax/pe#substring_removal) – Inian Dec 04 '17 at 08:01

1 Answers1

2

From GNU bash manual https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

${parameter#word} ${parameter##word}

The word is expanded to produce a pattern just as in filename expansion (see Filename Expansion). If the pattern matches the beginning of the expanded value of parameter, then the result of the expansion is the expanded value of parameter with the shortest matching pattern (the ‘#’ case) or the longest matching pattern (the ‘##’ case) deleted. If parameter is ‘@’ or ‘’, the pattern removal operation is applied to each positional parameter in turn, and the expansion is the resultant list. If parameter is an array variable subscripted with ‘@’ or ‘’, the pattern removal operation is applied to each member of the array in turn, and the expansion is the resultant list.

Simple explantion

Assume, parameter, PWD = /home/abc/pqr

Word is the pattern that matches */. Which means /home/abc/. Since pqr doesnot have a trailing /, pqr doesnot match that pattern.

From GNU bash manual,

the longest matching pattern (the ‘##’ case) deleted

## means delete the longest matching pattern from parameter. Which means remove /home/abc/ from /home/abc/pqr.

Which gives you pqr

PS: There are no dumb questions

Kalpa Gunarathna
  • 1,047
  • 11
  • 17
  • 1
    Thanks @kalpa-gunarathna this is a great answer, that's a powerful feature of bash I really didn't understand, super helpful to have it broken down like this! – Dave Kerr Dec 05 '17 at 09:01