sourcecode

Linux Bash에서 어레이에 LS를 할당하려면 어떻게 해야 합니까?

codebag 2023. 4. 13. 20:49
반응형

Linux Bash에서 어레이에 LS를 할당하려면 어떻게 해야 합니까?

array=${ls -d */}
echo ${array[@]}  

다음의 3개의 디렉토리가 있습니다.ww ee qq배열에 넣고 인쇄합니다.

이거일 거야

array=($(ls -d */))

편집: Gordon Davison의 솔루션에서 보다 일반적인 답변(파일 이름에 특수 문자가 포함되어 있는 경우)을 참조하십시오.이 답변은 구문 수정일 뿐입니다.

가능한 한 출력 해석은 피해야 합니다.ls( 주제에 대한 Greg's Wiki 참조).기본적으로 의 출력은ls파일명에 재미있는 문자가 있으면 애매해집니다.또한 보통 시간 낭비입니다.이 경우 실행 시ls -d */이 경우 셸이 확장됩니다.*/서브디렉토리 리스트(이미 필요한 것)에 대해서, 그 리스트를 인수로 건네줍니다.ls -d는, 각 디렉토리를 참조해, 「디렉토리에는 문제가 없습니다」라고 표시해, 인쇄합니다(일관성이 없고, 경우에 따라서는 애매한 형식).ls명령어가 도움이 되지 않습니다!

음, 좋아요, 한 가지 유용한 일을 하고 있어요. 서브디렉토리가 없으면*/그대로 남습니다.ls는, 「*」라고 하는 이름의 서브 디렉토리를 검색하지 않고, 존재하지 않는 에러 메세지를 출력해(stderr 에), 「*/」(stdout 에)를 출력하지 않습니다.

서브디렉토리명의 배열을 작성하는 보다 깔끔한 방법은 glob을 사용하는 것입니다.*/)에 전달하지 않고ls그러나 실제 서브디렉토리가 없는 경우 어레이에 "*/"를 넣지 않으려면 먼저 nullglob을 설정해야 합니다(다시 Greg의 Wiki 참조).

shopt -s nullglob
array=(*/)
shopt -u nullglob # Turn off nullglob to make sure it doesn't interfere with anything later
echo "${array[@]}"  # Note double-quotes to avoid extra parsing of funny characters in filenames

하위 디렉터리가 없는 경우 오류 메시지를 인쇄하려면 직접 인쇄하는 것이 좋습니다.

if (( ${#array[@]} == 0 )); then
    echo "No subdirectories found" >&2
fi

그러면 디렉토리의 파일이 한 줄씩 인쇄됩니다.

array=(ww/* ee/* qq/*)
printf "%s\n" "${array[@]}"

언급URL : https://stackoverflow.com/questions/18884992/how-do-i-assign-ls-to-an-array-in-linux-bash

반응형