2

I am trying to output the values of array element but I am getting weird output. Please have a look at it and help me solve it. Thank you.

n=2
declare -a myarray[$n]
myarray[0]=hey
myarray[1]=hello
myarray[2]=bye
for i in ${myarray[@]}
do
        echo $i
done

Output:

robin@robin-VirtualBox:~/lx$ sh array.sh
array.sh: 2: array.sh: declare: not found
array.sh: 3: array.sh: myarray[0]=hey: not found
array.sh: 4: array.sh: myarray[1]=hello: not found
array.sh: 5: array.sh: myarray[2]=bye: not found
array.sh: 6: array.sh: Bad substitution
Braiam
  • 67,791
  • 32
  • 179
  • 269
Robin
  • 363
  • 3
  • 6
  • 12

2 Answers2

3

declare is a bash shell builtin, and is not defined in the sh shell.

So, you must to run your script using the following command:

bash array.sh

Or add, the following shebang line at the start of your script:

#!/bin/bash

Be sure that your script is exectutable:

 chmod +x array.sh

And run it using the following command:

./array.sh
Radu Rădeanu
  • 169,590
2

Your script is correct, but type:

./array.sh

instead of sh array.sh

The difference between ./ and sh is explained here.

girardengo
  • 4,965
  • 1
  • 26
  • 31