What does the curly-brace syntax ${var%.*} mean?

后端 未结 3 1702
慢半拍i
慢半拍i 2020-12-01 10:45

I was reviewing some of my old code and came across this syntax:

extractDir=\"${downloadFileName%.*}-tmp\"

The only information I found sea

相关标签:
3条回答
  • 2020-12-01 11:25

    It is used when expanding an environment variable adjacent to some text that is not the variable, so the shell does not include all of it in the variable name.

    0 讨论(0)
  • 2020-12-01 11:27

    In this context, it is a parameter substitution.

    The ${variable%.*} notation means take the value of $variable, strip off the pattern .* from the tail of the value — mnemonic: percenT has a 't' at the Tail — and give the result. (By contrast, ${variable#xyz} means remove xyz from the head of the variable's value — mnemonic: a Hash has an 'h' at the Head.)

    Given:

    downloadFileName=abc.tar.gz
    

    evaluating extractDir="${downloadFileName%.*}-tmp" yields the equivalent of:

    extractDir="abc.tar-tmp"
    

    The alternative notation with the double %:

    extractDir="${downloadFileName%%.*}-tmp"
    

    would yield the equivalent of:

    extractDir="abc-tmp"
    

    The %% means remove the longest possible tail; correspondingly, ## means remove the longest matching head.

    0 讨论(0)
  • 2020-12-01 11:33

    It indicates that parameter expansion will occur.

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