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>
. 해당 옵션 이름 -f
은 noglob
다음과 같습니다.
$ 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