substr()
방금 awk가 문자열의 초기 인덱스로 0 또는 1을 허용한다는 것을 발견했습니다 . 나는 이것을 Gawk 5.1.0과 MacOS awk 20070501에서 테스트했습니다.
awk 'BEGIN {print substr("abcd", 0, 1)}'
"a"를 출력합니다. 동일
awk 'BEGIN {print substr("abcd", 1, 1)}'
그리고
awk 'BEGIN {print substr("abcd", 2, 1)}'
출력 "b"는 분명히 잘못된 것이 없음을 보여주기 위한 것입니다.
1 index 를 언급하는 것 외에는 페이지나 Gawk 파일에 man
아무 것도 표시되지 않습니다 .info
문서의 일관성을 유지하고 index()
첫 번째 위치가 1을 반환하고 불일치가 0을 반환한다는 점을 고려하면 항상 1을 사용하는 것이 가장 좋습니다.
내 질문은 왜 이런 이중성이 발생하는가입니다. 또한 어딘가에 문서화되어 있습니까? 이를 수행할 수 있는 다른 awk 구현이 있습니까?
답변1
~에서GNU awk 온라인 문서: "substr() 함수":
만약에시작1보다 작은 경우 substr()은 이를 1로 처리합니다. (POSIX는 이 경우 무엇을 해야할지 지정하지 않습니다. BWK awk가 수행하므로 gawk도 수행합니다.)시작문자열의 문자 수보다 크면 substr()은 빈 문자열을 반환합니다. 마찬가지로 만약에길이존재하지만 0보다 작거나 같으면 빈 문자열이 반환됩니다.