1

I'm getting started with bash scripting. I'm working with array elements that contain space characters. In the code below, the third array element is "Accessory Engine". I tried to set the space character using the \ symbol, but this doesn't help.

In the larger routine (not included here), I use the array elements to automatize some stuff with command line tools. Those command line tools would accept "Accessory Engine" as an input.

#!/bin/bash
components="Persistence Instrument Accessory\Engine"
for i in $components; do
  echo ${i}
done

Now the output from this code is:

  Persistence
  Instrument
  Accessory\Engine

But I want it to be:

  Persistence
  Instrument
  Accessory Engine

How can I achieve that?

Hauke Laging
  • 90,279
seb
  • 133

1 Answers1

6

Arrays are defined differently:

components=(Persistence Instrument "Accessory Engine")

or

components=(Persistence Instrument Accessory\ Engine)

And accessed differently:

for i in "${components[@]}"
Hauke Laging
  • 90,279
  • thanks for the input, I've tried both, but I still get the same issue:
    #!/bin/bash
    components=(one two three\ four)
    for i in ${components[@]}; do echo $i; done
    
    – seb Jan 28 '15 at 08:01
  • thanks, the last comment fixed it. why do I have to include the " characters in the for loop? – seb Jan 28 '15 at 08:02
  • 2
    @lomppi: Quotes are used to prevent unwanted word splitting. See http://mywiki.wooledge.org/BashGuide/Practices#Quoting – PM 2Ring Jan 28 '15 at 08:07
  • 2
    @lomppi It is not relevant for this problem (but if there are two or more successive spaces) but in general you should get used to using quotes: echo "${i}" – Hauke Laging Jan 28 '15 at 08:09