Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

408
Views
Bash Script Properties File Using '.' in Variable Name

I'm new to bash scripting and have a question about using properties from a .properties file within a bash script.

I have seen a bash properties file that uses'.' between variable names, for example:

this.prop.one=someProperty

and I've seen them called from within a script like:

echo ${this.prop.one}

But when I try to set this property I get an error:

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

I can use properties if I do it without '.' in the variable names, and include the props file:

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

I would really like to be able to use '.' in the variable names, and, if at all possible, not have to include . test.properties in the script.

Is this possible?

UPDATE:

Thanks for your answers! Well, then this is strange. I'm working with a bash script that looks like this (a service for glassfish):

#!/bin/bash

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

...

...and there are property files like this (build.properties):

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

So, there must be some way of doing this right? Are these maybe not considered 'variables' by definition if they're declared in a properties file? Thanks again.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Load them into an associative array. This will require your shell to be bash 4.x, not /bin/sh (which, even when a symlink to bash, runs in POSIX compatibility mode).

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

...after which you can access them like so:

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

If you want to recursively look up references, then it gets a bit more interesting.

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"
}

If we have props defined as follows (which you could also get by running the loop at the top of this answer with an appropriate input-file.properties):

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

...then behavior is as follows:

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

0

No can do. The bash manual says this about variable names:

name

A word consisting solely of letters, numbers, and underscores, and beginning with a letter or underscore. Names are used as shell variable and function names. Also referred to as an identifier.

Dots not allowed.

over 4 years ago · Santiago Trujillo Report

0

dot is not allowed to be variable name. so you cannot just simply source the property file.

What you can do is:

"parse" the file, not source it. E.g. with perl, awk or grep to get the value of interesting property name, and assign it to your shell var.

if you do want to set a var with dot in its name, you can use env 'a.b.c=xyz' and get the a.b.c from env output.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!