O que faz $ {0% / *} em scripts de shell?

16

Desculpe se esta é uma pergunta estúpida, mas eu pesquisei sem sucesso.

O que exatamente a segunda linha faz:

#!/bin/sh
cd ${0%/*} || exit 1

Eu sei que o primeiro é o shebang, o segundo tenta alterar o diretório, mas a parte confusa é ${0%/*} .

Você pode me explicar essa segunda linha?

    
por Navaro 06.01.2018 / 23:25

1 resposta

27

${0} é o primeiro argumento do script, ou seja, o nome ou caminho do script. Se você iniciar seu script como path/to/script.sh , então ${0} será exatamente essa sequência: path/to/script.sh .

A parte %/* modifica o valor de ${0} . Isso significa: pegue todos os caracteres até / seguido de um nome de arquivo. No exemplo acima, ${0%/*} será path/to .

Você pode ver isso em ação no seu shell:

$ x=path/to/script.sh
$ echo "${x%/*}"
path/to

Sh suporta muitos outros tipos de "substituição de parâmetros". Aqui está, por exemplo, como pegar o nome do arquivo em vez do caminho:

$ echo "${x##*/}"
script.sh

Em geral, % e %% sufixos de faixa, enquanto # e ## prefixos de faixa. Você pode ler mais sobre a substituição de parâmetros .

    
por Andrea Corbellini 06.01.2018 / 23:34