다음 bash 변수가 있는 경우:
$ echo "${pos}"
201
719
744
205
354
...다음과 같은 결과가 나옵니다...
!#bin/bash
(
IFS=:
awk -v str2="$pos" -v sep="[$IFS]" '
BEGIN {
m = split(str2, b, sep)
for (i=1; i<=m; ++i) {print b[i]}
}
'
)
-----------------
$ ./myscript.sh
201
719
744
205
354
...그런데 그렇게 하세요...
(
IFS=:
awk -v str2="$pos" -v sep="[$IFS]" '
BEGIN {
m = split(str2, b, sep)
for (i=1; i<=m; ++i) {print b[i]+10}
}
'
)
------
./myscript.sh
211
...그래서 추가 기능은 작동하지만 모든 요소에 대한 결과를 인쇄하지는 않습니다. 왜 안 돼?
답변1
이것은 IFS=: 설정이 잘못되었습니다. 따라서 Split()은 배열을 값으로 채우지 않고 str2의 한 값으로 채웁니다. 따라서 for 루프에서 b[i]를 인쇄하지만 실제로는 전체 str2인 b[1]을 한 번 인쇄합니다. 새 줄에서는 배열 b의 멤버를 인쇄한다고 생각하지만, Split()의 retrn 값을 확인하면 1입니다. IFS=:를 제거하면 스크립트가 제대로 작동합니다.