forЦиклы зацикливаются на позиционных параметрах, если ни одна in value1 value2...деталь не указана во всех оболочках, подобных Борну.
Это уже имело место в оболочке Bourne с конца 70-х годов, хотя в оболочке Bourne вам нужно было бы опустить это ;(вы также можете использовать for i do(за исключением некоторых старых версий Ash, где перед новой строкой требуется новая строка do)).
См. Какова цель ключевого слова do в Bash для циклов? для получения дополнительной информации, включая более удивительные варианты.
Выполнение:
for i
do
something with "$i"
done
это хорошая практика. Это немного более портативный / надежный, чем обычно эквивалентный:
for i in "$@"; do
something with "$i"
done
для которого оболочка Bourne, ksh88 имеет некоторые проблемы при определенных условиях (например, когда $#0 в некоторых версиях оболочки Bourne (которая ${1+"$@"}вместо "$@"может $IFSобойтись) или когда не содержит пробела в Bourne и ksh88), или когда nounsetопция включена , и $#0 в некоторых версиях некоторых оболочек , включая bash( снова ${1+"$@"}как обходной ).