Weird output by declare and array
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
Solution 1:
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
Solution 2:
Your script is correct, but type:
./array.sh
instead of sh array.sh
The difference between ./
and sh
is explained here.