답변:
for
in value1 value2...
모든 Bourne과 같은 쉘에 부품이 지정 되지 않은 경우 위치 매개 변수에서 루프가 반복됩니다 .
70 년대 후반의 Bourne 쉘에서는 이미 그랬지만 Bourne 쉘에서는 생략해야합니다 ;
( for i do
이전 줄 바꿈이 필요한 일부 오래된 애쉬 버전 제외 do
).
Bash for 루프에서 "do"키워드의 목적은 무엇입니까?를 참조하십시오 . 더 놀라운 변형을 포함한 더 많은 정보가 필요 합니다.
하기:
for i
do
something with "$i"
done
좋은 습관입니다. 일반적으로 동등한 것보다 약간 더 휴대 가능하고 신뢰할 수 있습니다.
for i in "$@"; do
something with "$i"
done
하는 Bourne 쉘은 (때 같은 일부 조건에서 몇 가지 문제가 ksh88 $#
Bourne 쉘의 일부 버전에서 0입니다 ( ${1+"$@"}
대신 "$@"
해결할 수)하거나 $IFS
, 또는 Bourne 씨와 ksh88의 공백 문자를 포함하지 않음) 이 nounset
옵션은 활성화되어 $#
있으며 일부 쉘의 일부 버전에서 bash
( 다시 ${1+"$@"}
해결 방법으로 ) 0입니다.
이것이 기본 동작입니다. 그것은에서 설명 help
의 for
키워드 :
terdon@tpad ~ $ help for
for: for NAME [in WORDS ... ] ; do COMMANDS; done
Execute commands for each member in a list.
The `for' loop executes a sequence of commands for each member in a
list of items. If `in WORDS ...;' is not present, then `in "$@"' is
assumed. For each element in WORDS, NAME is set to that element, and
the COMMANDS are executed.
Exit Status:
Returns the status of the last command executed.
당신이 그것을 반복하는 목록을 통해 제공하지 않는 경우에 따라서, 그 이상 반복을 기본값으로 $@
, 위치 매개 변수의 배열 ( a
, b
그리고 c
귀하의 예제에서).
그리고이 동작은 POSIX에 의해 정의 되므로 "좋은 습관"으로 간주됩니다.