줄 바꿈으로 배열을 생성하는 중 문제가 발생했습니다.

줄 바꿈으로 배열을 생성하는 중 문제가 발생했습니다.

파일 시스템에서 큰 디렉터리를 찾는 함수를 작성 중인데 /n해당 디렉터리는 경로가 포함된 모든 배열 요소에서 잘립니다. /native/proc...나는 이것이 내 IFS로 "\n"을 사용하는 것과 관련이 있다고 생각하지만, 그것이 없으면 각 열을 내가 원하는 것이 아닌 자체 요소로 나누기 때문에 다른 방법을 모르겠습니다. 내가 필요한 것은 자체 배열 요소의 각 전체 줄입니다. 이 명령은 어떻게 자체적으로 인쇄됩니까?

[root@JBLGSMM001 ~]# du -k / 2> /dev/null | sort -n | tail -n 10
255452  /usr/share
332644  /native/proc/82974
342119  /native/proc/70315
344519  /native/proc/70310
388510  /native/usr
683983  /usr
1226993 /native/proc/45026
9597039 /native/proc
10035430        /native
10846908        /

지금까지의 특징

where.isdisk () {

    bigstuff=$(du -k / 2> /dev/null | sort -n | tail -n 10)
    OLDIFS=$IFS
    IFS="\n"
    bigstuff=($bigstuff)
    IFS=$OLDIFS

}

변수 bigstuff는 다음과 같이 내가 원하는 방식으로 설정됩니다.

255452 /usr/share 332644 /native/proc/82974 342119 /native/proc/70315 344519 /native/proc/70310 388510 /native/usr 683983 /usr 1226989 /native/proc/45026 9772351 /native/proc 10210742 /native 11022217 /

그런 다음 배열을 만들 때 "/n"이 잘립니다.

[root@JBLGSMM001 ~]# OLDIFS=$IFS
[root@JBLGSMM001 ~]# IFS="\n"
[root@JBLGSMM001 ~]# bigstuff=($bigstuff)
[root@JBLGSMM001 ~]# IFS=$OLDIFS
[root@JBLGSMM001 ~]# echo ${bigstuff[@]}
255452 /usr/share 332644 / ative/proc/82974 342119 / ative/proc/70315 344519 / ative/proc/70310 388510 / ative/usr 683983 /usr 1226989 / ative/proc/45026 9772351 / ative/proc 10210742 / ative 11022217 /

편집하다

또한 "/"를 이전 요소로 전송합니다.

[root@JBLGSMM001 ~]# echo ${bigstuff[0]}
255452 /usr/share 332644 /
[root@JBLGSMM001 ~]# echo ${bigstuff[1]}
ative/proc/82974 342119 /
[root@JBLGSMM001 ~]# echo ${bigstuff[2]}
ative/proc/70315 344519 /
[root@JBLGSMM001 ~]# echo ${bigstuff[3]}
ative/proc/70310 388510 /

편집 2

\n으로 바꾸려고 했지만 \012여전히 원치 않는 결과가 발생합니다.

[root@JBLGSMM001 ~]# bigstuff=$(du -k / 2> /dev/null | sort -n | tail -n 10)
[root@JBLGSMM001 ~]# OLDIFS=$IFS
[root@JBLGSMM001 ~]# IFS="\012"
[root@JBLGSMM001 ~]# bigstuff=($bigstuff)
[root@JBLGSMM001 ~]# IFS=$OLDIFS
[root@JBLGSMM001 ~]# echo ${bigstuff[@]}
5545 /usr/share 33 644 /native/proc/8 974 34 9 /native/proc/7 3 5 3445 9 /native/proc/7 3 3885 /native/usr 683983 /usr 6989 /native/proc/45 6 977 387 /native/proc 778 /native 55 /
[root@JBLGSMM001 ~]# echo ${bigstuff[0]}

[root@JBLGSMM001 ~]# echo ${bigstuff[1]}
5545
[root@JBLGSMM001 ~]# echo ${bigstuff[2]}
/usr/share 33
[root@JBLGSMM001 ~]# echo ${bigstuff[3]}
644 /native/proc/8

이 문제를 해결하는 방법을 아는 사람이 있나요? 감사해요!

답변1

쉘은 \nin을 IFS개행 문자로 해석하지 않고 문자로 해석합니다 n(이스케이프됨, 여기서는 아무 작업도 수행하지 않음). /이전 항목은 삭제 n되지 않습니다.

IFS개행 문자를 설정하려면 다음을 사용하십시오.

IFS='
'

bash"C 문자열"(그 중 하나로)을 이해하는 쉘에서는 다음을 사용할 수도 있습니다.

IFS=$'\n'

관련 정보