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
'sourcecode' 카테고리의 다른 글
셸 명령 출력의 첫 줄을 가져옵니다. (0) | 2023.04.13 |
---|---|
Git에서 SHA 해시에 의한 커밋으로 되돌리시겠습니까? (0) | 2023.04.13 |
iOS 8.0 이전 버전에서는 자동 우선 레이아웃 폭을 사용할 수 없습니다. (0) | 2023.04.13 |
Swift에서 GCD 메인 스레드에 매개 변수를 사용하여 메서드를 호출하는 방법은 무엇입니까? (0) | 2023.04.13 |
GitHub "치명적: 원격 원본이 이미 있습니다" (0) | 2023.04.13 |