글로브 패턴을 확장하는 가장 좋은 방법은?


29

프로그래밍 방식으로 glob 패턴 ( ../smth*/*또는 /etc/cron*/)을 파일 목록 으로 확장해야합니다 . 가장 좋은 방법은 무엇입니까?


2
특별한 것을 할 필요는 없으며을 인용하지 마십시오 *.
Kevin

1
구문 분석하려고하면 대답과 같은 배열을 사용하십시오.
Kevin

답변:


40

배열 선언의 오른쪽에서 확장되도록하십시오.

list=(../smth*/)          # grab the list
echo "${#list[@]}"        # print array length
echo "${list[@]}"         # print array elements
for file in "${list[@]}"; do echo "$file"; done  # loop over the array


쉘 옵션 nullglob을 설정해야합니다.
기본적으로 설정되어 있지 않습니다.
glob (또는 여러 glob 중 하나)이 이름과 일치하지 않는 경우 오류를 방지합니다.

그것을 설정 bash

shopt -s nullglob

또는 zsh

setopt nullglob

나중에이 목록을 어떻게 인쇄합니까?
Rogach

그것은 단지 일반적인 배열입니다. 모든 배열로 가능한 모든 것을 할 수 있습니다. 몇 가지 예를 추가했습니다.
manatwork

1
문제가 있습니다. 패턴이 파일과 일치하지 않으면 자체적으로 인쇄되므로 좋지 않습니다.
Rogach

5
아, shopt -s nullglob가 해결합니다.
Rogach

1
@lindhe unsetopt및에 사용 된 것과 동일한 매개 변수입니다 setopt.
manatwork

0

지나치게 복잡 할 필요가 없습니다.

echo your/stuff*

이 작동하지 않습니다. 예를 들면 다음과 같습니다 TEST=$(echo your/stuff*) && eval \"$TEST\".your/stuff*: No such file or directory
Sebastian

@Sebastian 이것은 nullglob 문제입니다. 위 참조
Alexei

1
아니요, nullglob 문제가 아닙니다. TEST이스케이프 문자 사용은 변수를 *확장하거나 포함 하지 않는 문자열로 평가 합니다 .
세바스찬
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.