Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

414
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda