파일의 첫 번째 줄인 헤더 줄을 구분 기호로 구분하여 |
배열에 할당하고 있습니다.
IFS='|' read -r -a header < "/file_uploads/file_headers.txt"
낮은 환경에서는 잘 작동하지만 높은 환경에서는 비슷한 오류가 발생합니다.
file_upload_process.sh[47]: read: -a: unknown option
Usage: read [-ACprsSv] [-d delim] [-u fd] [-t timeout] [-n count] [-N count]
[var?prompt] [var ...]
file_upload_process.sh[48]: read: -a: unknown option
Usage: read [-ACprsSv] [-d delim] [-u fd] [-t timeout] [-n count] [-N count]
[var?prompt] [var ...]
낮은 환경과 높은 환경의 버전 차이가 있어 이 문제가 발생하는 것 같나요? 구분 기호 분할을 사용하여 파일의 첫 번째 줄을 배열로 읽는 다른 방법이 있습니까?
답변1
"낮은" 환경과 "높은" 환경에 서로 다른 기본 쉘이 있는 것 같습니다. 배열을 읽는 구문은 셸마다 다릅니다.
- Bash (1) 의 경우 관련 옵션은
-a
(소문자) 입니다. - Ksh의 경우 관련 옵션은
-A
(대문자) 입니다.
구문이 작동하는 "낮은" 환경에서는 Bash (1) 을 사용하는 반면 "높은" 환경에서는 Ksh를 사용합니다. 후자의 구문을 변경하면 -A
문제가 해결됩니다.
(1) Stéphane Chazelas가 지적했듯이변형ksh93
(현재는 단종된 으로 발전 ) Bash 호환성을 제공하기 위해 ksh2020
소문자 옵션을 지원합니다 . -a
따라서 "낮은" 환경과 "높은" 환경에는 서로 다른 Ksh 변형이 설치되어 있을 수도 있습니다.