What Is List And Arrays In Bash

There is no data structure in array with name List. But List is refer to the list of items while applying loop in bash

Lets look at an example. Let say we want to print 5 numbers 1 to 5 number in bash. Also checkout how to run bash in Python.

for x in {1..5}
do
    echo $x
done
1
2
3
4
5

In above code, 1..5 is a list of numbers but {1..5} is an array containing numbers.

Lets create file empty files using same code above.

for x in {1..5}
do
    touch file$x
done

Lets do ls and see if files exist.

ls file*
file1  file2  file3  file4  file5

As we see above using touch in bash, we can create a list of files using bash loop.

How To Loop Through List Of Files in Bash

Now in bash, we can loop through the list of files and find the size of each file.

for x in `ls file*`
do
      ls -lrt $x
done
-rw-r--r-- 1 root root 0 Dec 17 13:52 file1
-rw-r--r-- 1 root root 0 Dec 17 13:52 file2
-rw-r--r-- 1 root root 0 Dec 17 13:52 file3
-rw-r--r-- 1 root root 0 Dec 17 13:52 file4
-rw-r--r-- 1 root root 0 Dec 17 13:52 file5

As we see above, we are going through the list of files using for bash for loop and printing the size of each file.

What is Arrays in Bash

Any variable declared in bash can be treated as an array. Just use the () around the values to declare an array.:

files=(file1 file2)

How To Index Array In Bash

files is an array. We can index array in bash using curly brackets as shown below...

echo ${files[0]}; echo ${files[1]}
file1
file2

Loop Through Array in Bash

Lets loop through above array in bash.

for f in ${files}
do
    echo "$f"
done
file1

How To Loop Through All Values In Bash Array Using Operator @

Note instead of two, we just got file1, To loop through the array use index @ that means all. Lets try again.

for f in ${files[@]}
do
    echo "$f"
done
file1
file2

Lets create an array using ls in bash.

files1=$(ls file*)
echo ${files1[0]}
file1 file2 file3 file4 file5

Checkout the difference, now all the files are part of index 0 array. If we do files[1], we would get nothing.

echo ${files1[1]}

Lets loop through above array in bash.

for f1 in ${files1}
do
    echo "$f1"
done
file1
file2
file3
file4
file5

Note, we did't have to use @ to loop through all the files here because there is only one index $files[0] and by default bash is treating space as separator between the list of files.

But wait, can convert $files1 to an bash array.

Yes, we can using following...

files2=(${files1[@]})
echo ${files2[@]}
file1 file2 file3 file4 file5

Lets loop through above array now.

for f in ${files2[@]}
do
    echo "$f"
done
file1
file2
file3
file4
file5

Lets check if we can index it too.

echo ${files2[4]}
file5

There you go, it is working now.

Properties Of Bash Arrays

Lets talk about few Properties of Bash Arrays

How To Find Length Of Array In Bash

If you want to find the length of array in bash, use #, as shown below.

echo ${#files1[@]}
1
echo ${#files[@]}
2

How To Print Array Indices In Bash

echo ${!files[@]}
0 1

How to append values in array in bash

Lets append file3 to our array files

files+=file3

Lets check our array values now.

echo ${files[@]}
file1file3 file2

As we see above, we need to add space too to separate the values in array.

files=(file1 file2)
files+=" file3"
echo ${files[@]}
file1 file3 file2

Ok it is better now but as we see above order of values inside array in bash can't be maintained.

Wrap Up!

I hope above examples would help you understand about Bash arrays and lists.

Related Topics:

bash check if directory exists

bash functions bash function arguments