Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bash variable expansion with a '/'

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?

like image 659
Jimbo Avatar asked Sep 16 '15 22:09

Jimbo


2 Answers

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.

like image 156
user3159253 Avatar answered Sep 19 '22 23:09

user3159253


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.
like image 32
John Kugelman Avatar answered Sep 18 '22 23:09

John Kugelman