Why Sponsor Oils? | blog | oilshell.org
Aboriginal Linux has these lines of code:
if [ "$(noversion "${i/*\//}")" == "$1" ]
NO_CLEANUP=${NO_CLEANUP/temp//} blank_tempdir "$WORK"
Note that there are three slashes on each line, which means the last slash is a literal slash, not an operator.
The author is using the pattern replacement operator /
, which works like
this:
$ foo='-z-z-z' > echo ${foo/z/ZZ} -ZZ-z-z
A third meaning for /
is as pattern prefix. /z
means "replace all
occurences of z
, not just the first one":
$ foo='-z-z-z' > echo ${foo//z/ZZ} -ZZ-ZZ-ZZ
(In addition to /
, you can also use #
or %
for a prefix- or suffix-
anchored replacement.)
Now we have our example with four slashes and three meanings for /
:
operator, literal, and pattern modifier.
$ foo='-z-z-z' > echo ${foo//z//} -/-/-/
In the last post I showed five meanings for #
, and discussed the
larger motivation for this trivia. I will have a few more head-scratchers, and
then there should be more "fun" posts.