does linux shell support list data structure?

this question is not the same as Does the shell support sets?

i know lots of script language support list structure, such as python, python, ruby, and javascript, so what about linux shell?

does shell support such syntax?

for i in list:
do
     print i
done

i would first to initialize a list, for example:

ListName = [ item1, item2, ..., itemn ]

then iterate over it

is that possible when programming shell scripts?

Answers


It supports lists, but not as a separate data structure (ignoring arrays for the moment).

The for loop iterates over a list (in the generic sense) of white-space separated values, regardless of how that list is created, whether literally:

for i in 1 2 3; do
    echo "$i"
done

or via parameter expansion:

listVar="1 2 3"
for i in $listVar; do
    echo "$i"
done

or command substitution:

for i in $(echo 1; echo 2; echo 3); do
    echo "$i"
done

An array is just a special parameter which can contain a more structured list of value, where each element can itself contain whitespace. Compare the difference:

array=("item 1" "item 2" "item 3")
for i in "${array[@]}"; do   # The quotes are necessary here
    echo "$i"
done

list='"item 1" "item 2" "item 3"'
for i in $list; do
    echo $i
done
for i in "$list"; do
    echo $i
done
for i in ${array[@]}; do
    echo $i
done

Need Your Help

Rails validation error message is not showing and is giving undefined method error

ruby-on-rails validation ruby-on-rails-4

After Googling and searching on stackoverflow. Still can't find a solution to my problem. My Post model validation error message is not showing and is giving undefined method error.

Why isn't export working from bash script

linux bash shell variables export

Why isn't exporting a variable working in the following case: