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