Diferenças entre declaradas, definidas e definidas

2
  1. No shell, quais são as diferenças entre uma variável que é declarado, definido e definido?

    • O "declarado" significa que o identificador da variável existe, mas o armazenamento e o valor da variável não?

    • "definido" significa que o identificador e o armazenamento da variável existem?

    • O "set" significa que o valor da variável existe? (Eu li algo sobre isso na seção para variáveis de shell no Bash Manual)

    • Do "definidos" e "conjuntos" implicam uns aos outros e, portanto, são os mesmos?

  2. No manual do Bash, a seção de expansão de parâmetro menciona que ${parameter:-word} faz algo quando parameter não está definido ou é nulo.

    • Será que "null" significa "declarado" mas não "definido" ou "declarado" mas não "definido"?

    • "não definido" significa não "declarado"?

  3. Os conceitos mencionados também se aplicam aos nomes de funções e significam o mesmo que para parâmetros / variáveis?

  4. que outros conceitos semelhantes eu sinto falta?

Nota:

  • Estou interessado em respostas para o shell POSIX e Bash, respectivamente.

  • Observe que "o valor de uma variável existe", quero dizer que a variável foi atribuída a um valor. Por "o armazenamento de uma variável existe", quero dizer a variável foi alocada armazenamento na memória.

  • Minhas perguntas vieram da leitura do link e das seções relacionadas no manual do Bash.

por Tim 02.05.2016 / 05:20

1 resposta

4
    • "declarado" significa que você usou declare ou typeset para especificar o tipo da variável. Isso permite que você especifique que a variável nomeia uma matriz, sempre deve ser tratada como um inteiro, deve ser somente leitura, etc. Isso não existe no shell POSIX, é uma extensão bash .
    • Eu acho que "definido" e "conjunto" significam a mesma coisa: um valor foi dado à variável. A questão a que você ligou foi simplesmente inconsistente em suas palavras. A especificação do shell POSIX e o manual bash não usam a palavra "definido" quando se referem a variáveis, apenas diz:

      A parameter is set if it has an assigned value (null is a valid value).

    • "unset" é o oposto de "set" - a variável nunca foi atribuída (ou você já usou unset para remover a atribuição). Se você usar o comando set , a variável não será listada.
    • "null" significa que a variável recebeu uma string nula (comprimento zero) como o valor.
  1. Eu não acho que esses termos sejam relevantes para funções. Não existe uma função nula (você não pode deixar o corpo vazio ao definir uma função). E não há nada análogo a ${varname:-default} para funções que precisam fazer algo especial se a função não estiver definida. Assim, o nome da função é definido e não há problema em chamá-lo ou não, e você receberá um erro se tentar chamá-lo.

Como as variáveis do shell contêm strings de comprimento arbitrário, nenhum armazenamento é alocado quando a variável é declarada. O armazenamento é alocado dinamicamente quando a variável é atribuída.

    
por 04.05.2016 / 19:54

Tags