简体   繁体   中英

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?

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 (eg 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}
         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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM