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+"$@"}
как обходной ).
Это поведение по умолчанию, да. Документально в
help
изfor
ключевого слова:Так что , если вы не даете ему список перебрать, он будет по умолчанию итерации
$@
, массив позиционных параметров (a
,b
иc
в вашем примере).И это поведение определяется POSIX, так что да, это считается "хорошей практикой", насколько это возможно.
источник