O que significa “$ {x %% *}” em sh? [duplicado]

2

Acabei de ver "$$ {x %% *}" num makefile, o que significa "$ {x %% *}" em sh. Por que está escrito desta maneira?

como um makefile pode detectar se um comando está disponível na máquina local?

determine_sum = \
        sum=; \
        for x in sha1sum sha1 shasum 'openssl dgst -sha1'; do \
          if type "$${x%% *}" >/dev/null 2>/dev/null; then sum=$$x; break; fi; \
        done; \
        if [ -z "$$sum" ]; then echo 1>&2 "Unable to find a SHA1 utility"; exit 2; fi

checksums.dat: FORCE
    $(determine_sum); \
    $$sum *.org
    
por Galaxy 07.05.2013 / 09:58

1 resposta

5

É um recurso de substituição de variáveis do shell POSIX:

${var%Pattern} Remove from $var the shortest part of $Pattern that matches the back end of $var.
${var%%Pattern} Remove from $var the longest part of $Pattern that matches the back end of $var.

Então, se var="abc def ghi jkl"

echo "${var% *}" # will echo "abc def ghi"
echo "${var%% *}" # will echo "abc"
    
por 07.05.2013 / 10:15