파일 이름 glob에서 비어 있을 수 있는 배열을 만드는 방법은 무엇입니까?

파일 이름 glob에서 비어 있을 수 있는 배열을 만드는 방법은 무엇입니까?

그걸로 zsh만들면 어렵지 않아요비어있을 수 있습니다(비어 있을 수도 있는) 파일 이름 glob의 결과 배열입니다. 예를 들어:

% pathlist=( /no/such/path/*(N) ); printf -- "%d\n" $#pathlist
0

bash그러나 위 코드에 대해 제가 생각할 수 있는 가장 가까운 근사치는 glob이 null일 때 빈 배열을 생성하지 못합니다.

% pathlist=( /no/such/path/*    ); printf -- "%d\n" ${#pathlist[@]} )
1

이 경우 pathlist변수에는 "/no/such/path/*" 문자열이라는 단일 항목이 포함됩니다.

bash각 파일 에 pathlist하나의 항목 (그렇다면) 전 세계적으로 일치합니까?

답변1

쉘 옵션을 사용해야합니다nullglob

#!/bin/bash
shopt -s nullglob
pathlist=( /no/such/path/*    ); printf -- "%d\n" "${#pathlist[@]}" )
shopt -u nullglob

Bash 매뉴얼에서는 쉘 옵션을 다음과 같이 설명합니다 nullglob.

설정된 경우 Bash는 파일과 일치하지 않는 파일 이름 패턴이 자신이 아닌 빈 문자열로 확장되도록 허용합니다.

관련 정보