![구분 기호를 기준으로 분할된 첫 번째 줄을 읽고 배열(ksh)에 저장합니다.](https://linux55.com/image/198523/%EA%B5%AC%EB%B6%84%20%EA%B8%B0%ED%98%B8%EB%A5%BC%20%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C%20%EB%B6%84%ED%95%A0%EB%90%9C%20%EC%B2%AB%20%EB%B2%88%EC%A7%B8%20%EC%A4%84%EC%9D%84%20%EC%9D%BD%EA%B3%A0%20%EB%B0%B0%EC%97%B4(ksh)%EC%97%90%20%EC%A0%80%EC%9E%A5%ED%95%A9%EB%8B%88%EB%8B%A4..png)
파일의 첫 번째 줄인 헤더 줄을 구분 기호로 구분하여 |
배열에 할당하고 있습니다.
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 변형이 설치되어 있을 수도 있습니다.