ls를 배열에 씁니다(개행 문자로 분할).

ls를 배열에 씁니다(개행 문자로 분할).

내 디렉토리가 배열에 나열되어 출력되기를 원합니다.

readarray x < <( ls -la )
printf "%s" ${x[@]}

그래서 이것을 썼고 작동하지만 개행 대신 공백으로 분할됩니다. readarray 매뉴얼에서 "newline" 매개변수를 찾을 수 없어서 이 요청을 해결할 수 있는 영리한 방법이 있는지 궁금합니다. 사용을 제안하지 마세요 find(저는 사용이 제한되어 있습니다 ls -la).

나는 bash 4.3을 사용하고 있습니다.

답변1

행별로 읽지만 인용하는 것을 잊어버렸습니다. ${x[@]}이는 분할+글로브 연산자를 적용했음을 의미합니다.

readarray x < <(ls -la)
printf %s "${x[@]}"

또는 각 줄에서 마지막 개행 문자를 제거합니다.

readarray -t x < <(ls -la)
printf 'line: %s\n' "${x[@]}"

또는 사용분할+전역운영자:

IFS=$'\n' # split on newline
set -o noglob
x=($(ls -la))

(반대로 readarray -t, 이 방법은 빈 줄을 제거합니다(비록 출력에 나타날 가능성은 적지만 ls -la))

추가 정보 없이 파일 이름 목록(숨겨진 파일 이름 포함)을 얻으려면 ls -l다음을 사용하는 것이 좋습니다.

shopt -s nullglob dotglob
x=(*)

반대로 ls -a포함하지도 포함 .하지도 않습니다 ... 정말로 원한다면 이렇게 할 것입니다:

shopt -s nullglob
x=(.* *)

관련 정보