What is the meaning of the ${0##…} syntax with variable, braces and hash character in bash?

前端 未结 3 1327
野性不改
野性不改 2020-11-29 20:04

I just saw some code in bash that I didn\'t quite understand. Being the newbie bash scripter, I\'m not sure what\'s going on.

echo ${0##/*}
echo ${0}


        
相关标签:
3条回答
  • 2020-11-29 20:23

    See the section on Substring removal in the Advanced Bash-Scripting Guide‡:

    ${string#substring}
    

    Deletes shortest match of substring from front of $string.

    ${string##substring}
    

    Deletes longest match of substring from front of $string.

    The substring may include a wildcard *, matching everything. The expression ${0##/*} prints the value of $0 unless it starts with a forward slash, in which case it prints nothing.

    ‡ The guide, as of 3/7/2019, mistakenly claims that the match is of $substring, as if substring was the name of a variable. It's not: substring is just a pattern.

    0 讨论(0)
  • 2020-11-29 20:26

    Linux tip: Bash parameters and parameter expansions

    ${PARAMETER##WORD}  Results in removal of the longest matching pattern from the beginning rather than the shortest.
    for example
    [ian@pinguino ~]$ x="a1 b1 c2 d2"
    [ian@pinguino ~]$ echo ${x#*1}
    b1 c2 d2
    [ian@pinguino ~]$ echo ${x##*1}
    c2 d2
    [ian@pinguino ~]$ echo ${x%1*}
    a1 b
    [ian@pinguino ~]$ echo ${x%%1*}
    a
    [ian@pinguino ~]$ echo ${x/1/3}
    a3 b1 c2 d2
    [ian@pinguino ~]$ echo ${x//1/3}
    a3 b3 c2 d2
    [ian@pinguino ~]$ echo ${x//?1/z3}
    z3 z3 c2 d2
    
    0 讨论(0)
  • 2020-11-29 20:26

    See the Parameter Expansion section of the bash(1) man page.

    0 讨论(0)
提交回复
热议问题