Inside of a while read line loop, I see this variable expansion ${line/device name:}
. I've tried running the script with my own input file and it just prints out the line.
Can you tell me what that expansion is doing?
The variable name is line
. / is for string substitution, that is "device name:" if exists anywhere in the $line
is removed.
> line="a device name: some name"
> echo ${line/device name:}
a some name
You may also see #
and %
substitutions, which stand for substitutions in the line
begin and end. Also beware that such /
substitution is a bash-specific feature (e.g. ash
doesn't support it, %
and #
are seemingly portable), so you should use #!/bin/bash
instead of #!/bin/sh
as a hashbang in the beginning of your script.
It returns $line
with the substring device name:
removed. From the bash man page:
${parameter/pattern/string}
Pattern substitution. The pattern is expanded to produce a pattern just as in
pathname expansion. Parameter is expanded and the longest match of pattern
against its value is replaced with string. If pattern begins with /, all
matches of pattern are replaced with string. Normally only the first match is
replaced. If pattern begins with #, it must match at the beginning of the
expanded value of parameter. If pattern begins with %, it must match at the
end of the expanded value of parameter. If string is null, matches of pattern
are deleted and the / following pattern may be omitted. If parameter is @ or
*, the substitution 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 substitution operation is applied to each member
of the array in turn, and the expansion is the resultant list.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With