Diferencias entre declarado, definido y establecido

  1. En shell, ¿cuáles son las diferencias entre una variable que se declara, define y establece?

  2. En el manual de Bash, la sección de expansión de parameters menciona que ${parameter:-word} hace algo cuando el parameter está desactivado o nulo.

    • ¿Significa "nulo" "declarado" pero no "definido", o "declarado" pero no "establecido"?

    • ¿"Desarmado" significa no "declarado"?

  3. ¿Los conceptos mencionados también se aplican a los nombres de funciones y significan lo mismo que para los parameters / variables?

  4. ¿Qué otros conceptos similares echo de less?

Nota:

  • Estoy interesado en respuestas para shell POSIX y Bash respectivamente.

  • Tenga en count que por "existe el valor de una variable", quiero decir que a la variable se le ha asignado un valor. Por "existe el almacenamiento de una variable", quiero decir que a la variable se le ha asignado almacenamiento en la memory.

  • Mis preguntas surgieron al leer https://unix.stackexchange.com/a/56846/674 y las secciones relacionadas en el manual de Bash.

Related of "Diferencias entre declarado, definido y establecido"

    • "declarado" significa que ha utilizado declare o typeset para especificar el tipo de la variable. Esto le permite especificar que la variable nombra una matriz, siempre debe tratarse como un integer, debe ser de solo lectura, etc. Esto no existe en el shell POSIX, es una extensión bash .
    • Creo que "definido" y "establecer" significan lo mismo: se le ha dado un valor a la variable. La pregunta a la que se vinculó fue simplemente inconsistente en su networkingacción. La especificación del shell POSIX y el manual bash no usan la palabra "definido" cuando se refieren a variables, solo dice:

      Un parámetro se establece si tiene un valor asignado (null es un valor válido).

    • "unset" es lo opuesto a "set" – la variable nunca ha sido asignada (o desde entonces has usado unset para eliminar la asignación). Si usa el command set , la variable no aparecerá en la list.
    • "nulo" significa que a la variable se le ha asignado una cadena nula (longitud cero) como valor.
  1. No creo que estos términos sean relevantes para las funciones. No existe la function nula (no se permite dejar el cuerpo vacío al definir una function). Y no hay nada análogo a ${varname:-default} para las funciones que necesitan hacer algo especial si la function no está definida. Entonces, o bien el nombre de la function está definido y está bien llamarlo, o no, y obtendrá un error si intenta llamarlo.

Como las variables de shell contienen cadenas de longitud arbitraria, no se asigna ningún almacenamiento cuando se declara la variable. El almacenamiento se asigna dinámicamente cuando se asigna la variable.