To create a list in a loop in Bash, you have several options depending on how you want to use the list later. Here are a few common approaches:

  1. Using an array:
# Initialize an empty array
my_list=()

# Add elements in a loop
for i in {1..5}; do
    my_list+=("item_$i")
done

# Print the list
echo "${my_list[@]}"

# Access individual elements
echo "First item: ${my_list[0]}"
echo "Third item: ${my_list[2]}"
  1. Using a string with newlines:
# Initialize an empty string
my_list=""

# Add elements in a loop
for i in {1..5}; do
    my_list+="item_$i"$'\n'
done

# Print the list
echo "$my_list"

# Use the list in a loop
while IFS= read -r item; do
    echo "Processing: $item"
done <<< "$my_list"
  1. Using a file:
# Create or truncate a file
> my_list.txt

# Add elements in a loop
for i in {1..5}; do
    echo "item_$i" >> my_list.txt
done

# Print the list
cat my_list.txt

# Use the list in a loop
while IFS= read -r item; do
    echo "Processing: $item"
done < my_list.txt
  1. Using a comma-separated string:
# Initialize an empty string
my_list=""

# Add elements in a loop
for i in {1..5}; do
    [ -n "$my_list" ] && my_list+=","
    my_list+="item_$i"
done

# Print the list
echo "$my_list"

# Use the list in a loop
IFS=',' read -ra items <<< "$my_list"
for item in "${items[@]}"; do
    echo "Processing: $item"
done

Each method has its advantages:

  • Arrays are great for in-memory manipulation and when you need random access to elements.
  • Newline-separated strings are useful when you want to process the list line by line.
  • Files are good for large lists or when you need to persist the list between script runs.
  • Comma-separated strings are handy when you need a compact representation or want to pass the list as a single argument.

Choose the method that best fits your specific use case and how you plan to use the list later in your script.