It's a special way of handling command-line options using for
loop.
It's equivalent to:
for arg in "$@"; do
TCID="${TCID}_$arg"
done
It's not specific to bash. It's defined in POSIX:
The for Loop
The for loop shall execute a sequence of commands for
each member in a list of items. The for
loop requires that the
reserved words do
and done
be used to delimit the sequence of
commands.
The format for the for loop is as follows:
for name [ in [word ... ]] do
compound-list
done
First, the list of words following in
shall be expanded to generate a
list of items. Then, the variable name shall be set to each item, in
turn, and the compound-list
executed each time. If no items result
from the expansion, the compound-list
shall not be executed. Omitting:
in word ...
shall be equivalent to:
in "$@"