Consulta especial de parâmetro - múltiplo usado para obter o nome do comando? [duplicado]

0

Em um texto único que nos forneceu para cobrir o bash scripting, a seguinte atribuição de variáveis tem sido perplexo e eu ainda não recebi uma resposta de ninguém, por isso espero que alguém aqui possa ajudar.

name=${0##*/}  

Isso deve se expandir para fornecer o nome do comando inserido. Eu posso ver como isso é retirado do argumento $ 0, como o primeiro caractere nas chaves é 0. No entanto, de acordo com as informações na página anterior (do referido uni doc) e para fontes que eu olhei na web até agora , # significa o número de argumentos com os quais o script foi chamado e * contém o argumento como uma string. Eu não consigo entender como esses todos esses parâmetros especiais estão se expandindo apenas para o argumento $ 0.

Espero que o nome se expanda para: código / script2 3 3 código / script2 fred george allison.

Eu realmente aprecio se alguém puder explicar o que cada um dos parâmetros especiais entre as chaves está fazendo para expandir o nome: code / script2

Obrigado pela sua ajuda antecipadamente!

Abaixo está o script inteiro e a saída para o contexto:

1  #!/bin/bash
2  # A simple script showing some of the special variables
3
4 echo "The full name of this script is $0" 
5
6 name=${0##*/}
7
8 echo "The name of this script is $name"
9
10 echo "The process ID of this script is $$"
11
12 echo "This script was called with $# parameters" 13
14 echo "The parameters are \"$*\""
16  echo "Parameter 1 is - $1"
17  echo "Parameter 2 is - $2"
18  echo "Parameter 3 is - $3"

prompt: code/script2 fred george allison
The full name of this script is code/script2 
The name of this script is script2
The process ID of this script is 3501
This script was called with 3 parameters The parameters are "fred george allison"
Parameter 1 is - fred
Parameter 2 is - george
Parameter 3 is - allison 
    
por user65751 27.04.2014 / 03:21

1 resposta

1

Você está confundindo ${#var} (que retorna o comprimento de var ) com ${var##substr} , que retorna o valor de var após remover o prefixo mais longo correspondente substr .

Nesse caso, a substring é */ , ou seja, todos os componentes principais do caminho do nome pelo qual o script foi chamado - deixando apenas o componente final do nome do arquivo, script2 . Embora ambas as expressões usem o caractere # , a posição do # é significativa.

Há também ${var#substr} , que parece superficialmente ainda mais próximo de ${#var} , mas retorna o valor de var após a remoção do prefixo correspondente menor .

Veja por exemplo Removendo parte de uma string

    
por 27.04.2014 / 03:51