![이상한 전단 동작](https://linux55.com/image/70091/%EC%9D%B4%EC%83%81%ED%95%9C%20%EC%A0%84%EB%8B%A8%20%EB%8F%99%EC%9E%91.png)
나는 그것을 사용하고 있습니다 cut (GNU coreutils) 8.24
.
명령: echo "TEST=test" | cut -d"=" -f2-
출력 Ttest
. 이것은 예상된 동작이 아닌 것 같습니다.
제가 잘못 사용한 걸까요, 아니면 뭔가 문제가 있는 걸까요 cut
?
답변1
복제 문제는 libc 제공업체로 인해 발생합니다. 즉, 이는 uclibc의 버그인 것 같습니다.https://bugs.busybox.net/show_bug.cgi?id=4099
어떤 경우에는 필드 2를 인쇄하라는 지시를 받으면 cut은 필드 1의 첫 번째 문자와 필드 2의 모든 문자를 인쇄합니다. 예를 들면 다음과 같습니다.
printf "4123\t2\t3\t4\t5\n" | cut -f 2
2가 아닌 42를 인쇄합니다. 나는 해당 컷에 대해 strace를 실행했고 컷이 전체 라인을 인쇄하고 있음을 보여주었습니다.
이 버그는 구분 기호 없이 줄을 처리하는 방법과 관련된 것 같습니다. 따라서 현재 해결 방법은 다음과 같이 "-s" 플래그를 사용하는 것입니다.
printf "4123\t2\t3\t4\t5\n" | cut -f 2 -s
예상대로 "2"가 인쇄됩니다.
이런 상황에 처한 대부분의 사람들은 buildroot를 사용하고 있다고 생각합니다. 해당 링크를 따라 uclibc의 구성을 수정하는 것이 좋습니다. 주로 이는 다음을 의미합니다.
make uclibc-menuconfig
Select y for 'String and Stdio Support --> Provide a macro version of [getc|putc]'
이는 libc 구현을 변경한다는 점에 유의하세요. 기본적으로 모든 것을 다시 빌드하는 것이 현명할 수 있습니다.