Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

412
Vistas
Archivo de propiedades de Bash Script usando '.' en nombre de variable

Soy nuevo en bash scripting y tengo una pregunta sobre el uso de propiedades de un archivo .properties dentro de un script bash.

He visto un archivo de propiedades de bash que usa '.' entre nombres de variables, por ejemplo:

 this.prop.one=someProperty

y los he visto llamados desde dentro de un script como:

 echo ${this.prop.one}

Pero cuando trato de establecer esta propiedad, aparece un error:

 ./test.sh: line 5: ${this.prop.one}: bad substitution

Puedo usar propiedades si lo hago sin '.' en los nombres de las variables e incluya el archivo props:

 #!/bin/bash . test.properties echo ${this_prop_one}

Realmente me gustaría poder usar '.' en los nombres de las variables y, si es posible, no tiene que incluir . test.properties en el script.

es posible?

ACTUALIZAR:

¡Gracias por tus respuestas! Bueno, entonces esto es extraño. Estoy trabajando con un script bash que se ve así (un servicio para glassfish):

 #!/bin/bash start() { sudo ${glassfish.home.dir}/bin/asadmin start-domain domain1 } ...

... y hay archivos de propiedades como este (build.properties):

 # glassfish glassfish.version=2.1 glassfish.home.dir=${app.install.dir}/${glassfish.target} ...

Entonces, debe haber alguna forma de hacer esto, ¿verdad? ¿Es posible que no se consideren 'variables' por definición si se declaran en un archivo de propiedades? Gracias de nuevo.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Cárguelos en una matriz asociativa. Esto requerirá que su shell sea bash 4.x, no /bin/sh (que, incluso cuando es un enlace simbólico a bash, se ejecuta en modo de compatibilidad con POSIX).

 declare -A props while read -r; do [[ $REPLY = *=* ]] || continue props[${REPLY%%=*}]=${REPLY#*=} done <input-file.properties

...después de lo cual puede acceder a ellos así:

 echo "${props[this.prop.name]}"

Si desea buscar referencias recursivamente, entonces se vuelve un poco más interesante.

 getProp__property_re='[$][{]([[:alnum:].]+)[}]' getProp() { declare -A seen=( ) # to prevent endless recursion declare propName=$1 declare value=${props[$propName]} while [[ $value =~ $getProp__property_re ]]; do nestedProp=${BASH_REMATCH[1]} if [[ ${seen[$nestedProp]} ]]; then echo "ERROR: Recursive definition encountered looking up $propName" >&2 return 1 fi value=${value//${BASH_REMATCH[0]}/${props[$nestedProp]}} done printf '%s\n' "$value" }

Si tenemos props definidos de la siguiente manera (que también podría obtener ejecutando el bucle en la parte superior de esta respuesta con un archivo de input-file.properties apropiado):

 declare -A props=( [glassfish.home.dir]='${app.install.dir}/${glassfish.target}' [app.install.dir]=/install [glassfish.target]=target )

... entonces el comportamiento es el siguiente:

 bash4-4.4$ getProp glassfish.home.dir /install/target
over 4 years ago · Santiago Trujillo Denunciar

0

No se puede hacer. El manual de bash dice esto sobre los nombres de las variables:

nombre

Una palabra que consta únicamente de letras, números y guiones bajos, y que comienza con una letra o un guión bajo. Los nombres se utilizan como variables de shell y nombres de funciones. También conocido como identificador.

Puntos no permitidos.

over 4 years ago · Santiago Trujillo Denunciar

0

no se permite que el punto sea un nombre de variable. por lo que no puede simplemente obtener el archivo de propiedades.

Lo que puedes hacer es:

"analizar" el archivo, no buscarlo. Por ejemplo, con perl, awk o grep para obtener el valor del nombre de propiedad interesante y asignarlo a su shell var.

si desea establecer una var con un punto en su nombre, puede usar env 'abc=xyz' y obtener el abc de la salida env .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda