Reading LTP shell code it uses strange for loop syntax:
for arg; do
TCID="${TCID}_$arg"
done
- How does it takes arguments? I’d expect it loops over
$arg, separating with$IFS, but when trying$ arg="aa bb"; for arg; do echo $arg; doneand it prints nothing. - Is it a bashism?
>Solution :
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
doneFirst, 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 "$@"