와일드카드가 활성화되어 있는지 테스트

와일드카드가 활성화되어 있는지 테스트

set +f와일드카드를 사용하고 활성화/비활성화 할 수 있다는 것을 알고 있습니다 set -f.

하지만 현재 활성화되어 있는지 어떻게 테스트합니까?

고유한 이름을 가진 파일을 생성하고 해당 파일과 일치하는 패턴이 있는지 테스트할 수 있습니다. 그래도 더 깨끗한 솔루션을 기대하고 있습니다.

답변1

이렇게 하거나 set -f그렇지 않으면 글로빙을 비활성화하는 경우:,$-포함됩니다 f:

$ echo $-
himBHs
$ set -f
$ echo $-
fhimBHs
$ bash -fc 'echo $-'
fhBc

그래서:

[[ $- = *f* ]]

또는:

case $- in
 *f*)  ... ;;
esac

답변2

적어도 bash이것이 사용할 수 있는 쉘에만 해당되는지는 알 수 없습니다 test -o <optname>. 해당 옵션 이름 -fnoglob다음과 같습니다.

$ set -f
$ test -o noglob; echo $?
$ set +f
$ test -o noglob; echo $?

또는 스크립트에서

if [ -o noglob ]; then
    echo globbing disabled
else
    echo globbing enabled
fi

답변3

이 변수에는 $-현재 플래그가 포함되어 있습니다.

그래서 당신은 할 수 있습니다

case "$-" in
   (*'f'*) echo "file globbing is disabled" ;;
   (*)     echo "file globbing is enabled" ;;
esac

답변4

여러 가지 방법이 있습니다.

  • 가장 휴대성이 뛰어난 테스트가 확장되고 있습니다.$-

    set -f; [ -z "${-##*f*}" ] && echo noglob set
    
  • Bash 및 일부 쉘에서는:

    [ -o noglob ] && echo noglob
    
  • 여러 쉘에 대한 테스트는 다음과 같습니다.

    set -o | grep noglob
    
  • bash에서만 작동하는 것은 다음과 같습니다.

    $ shopt -op noglob
    shopt -o noglob               # +o if globbing is active.
    
  • 자동으로 테스트해야 하는 경우:

    if shopt -oq noglob; then echo noglob set; fi
    
  • globbing을 통해 이를 테스트할 수도 있습니다(매우 이식 가능).

    set -- .*; if [ "$#" -gt 1 ]; then echo glob active; fi
    

관련 정보