A loop can apply the same naming template to several inputs. The prefix changes the generated names while the list stays fixed.

Program

Play the script to choose the prefix and see the generated names.

prefix
loop_template_names.sh
Replay: real traced execution (multi-file project)
#!/usr/bin/env bash

prefix="svc"
names=("api" "web")
generated=""
for name in "${names[@]}"; do
    generated+="$prefix-$name "
done
generated="${generated% }"
echo "$generated"
#!/usr/bin/env bash

prefix="job"
names=("api" "web")
generated=""
for name in "${names[@]}"; do
    generated+="$prefix-$name "
done
generated="${generated% }"
echo "$generated"
  1. prefix ← svc

    3prefix="svc"4names=("api" "web")
    values this stepsvcprefix
  2. names ← api, web

    3prefix="svc"4names=("api" "web")5generated=""
    values this stepapi, webnames
  3. generated ← (empty)

    4names=("api" "web")5generated=""6for name in "${names[@]}"; do
    values this step(empty)generated
  4. generated ← svc-api

    6for name in "${names[@]}"; do7    generated+="$prefix-$name "8done
    values this step(empty) svc-api generatedapinamesvcprefix
  5. generated ← svc-api svc-web

    6for name in "${names[@]}"; do7    generated+="$prefix-$name "8done
    values this stepsvc-api svc-api svc-web generatedwebnamesvcprefix
  6. generated ← svc-api svc-web

    8done9generated="${generated% }"10echo "$generated"
    values this stepsvc-api svc-web svc-api svc-webgenerated
  7. echo "$generated"

    9generated="${generated% }"10echo "$generated"
    outputsvc-api svc-web
    values this stepsvc-api svc-webgenerated
  1. prefix ← job

    3prefix="job"4names=("api" "web")
    values this stepjobprefix
  2. names ← api, web

    3prefix="job"4names=("api" "web")5generated=""
    values this stepapi, webnames
  3. generated ← (empty)

    4names=("api" "web")5generated=""6for name in "${names[@]}"; do
    values this step(empty)generated
  4. generated ← job-api

    6for name in "${names[@]}"; do7    generated+="$prefix-$name "8done
    values this step(empty) job-api generatedapinamejobprefix
  5. generated ← job-api job-web

    6for name in "${names[@]}"; do7    generated+="$prefix-$name "8done
    values this stepjob-api job-api job-web generatedwebnamejobprefix
  6. generated ← job-api job-web

    8done9generated="${generated% }"10echo "$generated"
    values this stepjob-api job-web job-api job-webgenerated
  7. echo "$generated"

    9generated="${generated% }"10echo "$generated"
    outputjob-api job-web
    values this stepjob-api job-webgenerated
loop template The loop applies the same text pattern to each array value.
accumulator `generated` collects the output as each row is processed.
trim suffix `${generated% }` removes one trailing space from the finished string.