variável bash enigmática

2

Encontrei este código enigmático que, acredito, contém alguma forma de expansão variável.

echo "Usage: ${0##*/} [-f] [-u user] [--] "

O sinal de dólar é seguido pela string entre colchetes equivalente à variável bash $ 0? Se sim, por que alguém usaria o primeiro em oposição ao segundo? Obrigado por qualquer esclarecimento.

    
por cdaaawg 01.04.2012 / 11:06

2 respostas

3

${variable} é a expansão regular dos parâmetros. As chaves podem ser usadas para delimitar um nome de variável ao expandir no meio de outra cadeia. Por exemplo, se você quisesse expandir $variablefoo , o shell não teria como saber onde o nome da variável terminaria. Ao usar ${variable}foo , o shell sabe exatamente o que você quer dizer.

As chaves também permitem que várias outras operações sejam feitas durante a expansão. Seu exemplo acima exclui o que a expressão corresponde à esquerda. Se for dada uma string como o caminho /a/b/c , ele retornará c . Isso é efetivamente equivalente ao que basename faz, mas a expansão de parâmetro pode ser mais conveniente e legível em algumas situações.

Existem várias operações básicas de string que podem ser executadas com a expansão de parâmetros. Sendo uma operação incorporada, eles geralmente têm um desempenho melhor que o sed ou o awk ao executar tarefas simples.

Se você gosta de scripts de shell, sugiro que leia este guia na wiki dos hackers.

    
por 01.04.2012 / 14:53
2

Ele usa expansão de parâmetros para remover o diretório de $0 .

    
por 01.04.2012 / 11:12

Tags