The C shell's
string editing operators (9.6
)
can be used with shell variables and, in some cases, with command history.
Those operators also work with bash
history.
But the Korn shell and bash
have a different way to edit shell
variables.
Table 9.1
shows them:
Table 9.1: ksh and bash String Editing Operators
Operator |
Explanation |
${variable
#pattern
} |
Delete the shortest part of pattern
that matches
the beginning of variable
's value. Return the rest.
|
${variable
##pattern
} |
Delete the longest part of pattern
that matches
the beginning of variable
's value. Return the rest.
|
${variable
%pattern
} |
Delete the shortest part of pattern
that matches
the end of variable
's value.Return the rest.
|
${variable
%%pattern
} |
Delete the longest part of pattern
that matches
the end of variable
's value.Return the
rest.
|
The pattern
s can be filename wildcard characters: *
,
?
, and []
; with string editing operators,
wildcards match strings in the same way they match filenames.
(These are not sed
-like regular expressions.)
The first two operators, with #
, edit variables from the front.
The other two, with %
, edit from the end.
Here's a system for remembering which does what:
you put a number sign (#
) at the front
of a number
and a percent sign (%
) at the end
of a number.
Time for some examples.
The variable var
contains /a/b/c/d/e.f.g
:
Expression
Result
${var} /a/b/c/d/e.f.g
${var#/*/} b/c/d/e.f.g
${var##/*/} e.f.g
${var%.*} /a/b/c/d/e.f
${var%%.*} /a/b/c/d/e
${var%%/*/} /a/b/c/d/e.f.g
${var%%/*}
${var%/b*} /a
${var%%/b*} /a
How about a practical example?
The
PATH
variable (6.4
)
is a string separated by colons (:
).
Let's say you want to remove the last directory from the system path
and add $HOME/bin
in place of the last directory.
You'd type this command, or put a line like this in your .profile
:
PATH=${PATH%:*}:$HOME/bin
Because the ${PATH%:*}
has a single %
,
that operator removes the least it can:
just the last colon plus the directory name after it.
After string editing, the rest of the PATH
has
:$HOME/bin
appended to it.
The new value is saved as the new PATH
.
The Bourne shell's
parameter substitution operators (45.12
)
look similar, but they're mostly useful for shell programming.