89 lines
1.9 KiB
Markdown
89 lines
1.9 KiB
Markdown
---
|
|
tags:
|
|
- Programming_Languages
|
|
- shell
|
|
- arrays
|
|
---
|
|
|
|
## List variables
|
|
|
|
When we use the term **list** in bash, we are not actually referring to a specific type of data structure. Instead a **list variable** is really just a normal variable wrapped in quote marks that has strings separated by spaces. Despite the fact that this is not an actual iterative data structure, we are still able to loop through variables of this type.
|
|
|
|
````bash
|
|
A_STR_LIST="cat dog hamster"
|
|
AN_INT_LIST="1 2 3"
|
|
````
|
|
|
|
To iterate through a list variable, we can use a for loop:
|
|
|
|
````bash
|
|
for ele in $A_STR_LIST; do
|
|
echo $ele
|
|
done
|
|
````
|
|
|
|
## Brace expansion for listed variables
|
|
|
|
With a sequence of variables that follow a pattern, for example the natural numbers (1, 2, 3, 4, ...) we can represent them in a condensed format using something called **brace expansion**. For instance to represent the natural numbers from 1 through 10:
|
|
|
|
````bash
|
|
{1..10}
|
|
````
|
|
|
|
Here the **two dots** stand for the intervening values.
|
|
|
|
We can iterate through brace expanded variables just the same:
|
|
|
|
````bash
|
|
for num in {1..4}; do
|
|
echo $num
|
|
done
|
|
````
|
|
|
|
## Arrays
|
|
|
|
We define an array as follows:
|
|
|
|
````bash
|
|
words=(here are some words)
|
|
````
|
|
|
|
We can also explicitly define an array using `declare` :
|
|
|
|
````bash
|
|
declare -a words=("element1" "element2" "element3")
|
|
````
|
|
|
|
### Index notation
|
|
|
|
We access specific array elements by their index using the same braces style we use with variables:
|
|
|
|
````bash
|
|
echo ${words[2]}
|
|
|
|
# element3
|
|
````
|
|
|
|
### Iterating through arrays
|
|
|
|
````bash
|
|
for i in "${words[@]}"
|
|
do
|
|
echo "$i"
|
|
# or do whatever with individual element of the array
|
|
done
|
|
# element1 element2 element3
|
|
````
|
|
|
|
Note that `@` here is a special symbol standing for all the members of the `words` array.
|
|
|
|
## Looping through file system
|
|
|
|
The following script loops through all files in a directory that begin with `l` and which are of the bash file type (`.sh`) :
|
|
|
|
````bash
|
|
for x in ./l*.sh; do
|
|
echo -n "$x "
|
|
done
|
|
echo
|
|
````
|