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?

0

1 Answer 1

6

Arrays are defined differently:

components=(Persistence Instrument "Accessory Engine")

or

components=(Persistence Instrument Accessory\ Engine)

And accessed differently:

for i in "${components[@]}"
4
  • 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 Commented Jan 28, 2015 at 8:01
  • thanks, the last comment fixed it. why do I have to include the " characters in the for loop? Commented Jan 28, 2015 at 8:02
  • 2
    @lomppi: Quotes are used to prevent unwanted word splitting. See mywiki.wooledge.org/BashGuide/Practices#Quoting Commented Jan 28, 2015 at 8: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}" Commented Jan 28, 2015 at 8:09

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.