回答:
引用シングルUnixの仕様バージョン2、ボリューム「コマンド&ユーティリティ」、§2.13.3:
ファイル名がピリオド(
.
)で始まる場合、パターンの最初の文字としてピリオドを使用するか、スラッシュ文字の直後にピリオドを使用して、ピリオドを明示的に一致させる必要があります。(…)[.abc]
ファイル名の先頭のピリオドに一致できるなど、ブラケット式一致リストの明示的なピリオドが一致するかどうかは指定されていません。
の2番目のピリオド..
、またはの唯一のピリオドに続く空の文字列.
が、のワイルドカードと一致しない例外はありません.*
。したがって、標準はとと.*
一致.
し..
、そうかもしれませんが迷惑です。
上記の一節では、シェル(sh
コマンド)の動作について説明しています。glob
Cライブラリ関数参照のセクションは、この一節を参照しています。
言語は、POSIX:2001およびIEEE 1003.1-2001とも呼ばれるバージョン3でもまったく同じです。これは、最新のシステムが実装しているものです。
Dash、bash、およびksh93はPOSIXに準拠しています。Pdkshとzsh(の下でもemulate sh
)はサポートしていません。
kshでは、.*
スキップ.
を..
設定してを設定できますがFIGNORE='.?(.)'
、これには*
インクルードドットファイルを作成するという副作用があります。または、を設定できますがFIGNORE='.*'
、その後.*
は何にも一致しません。
bashでは、.*
スキップ.
を..
設定してを設定することができますがGLOBIGNORE='.:..'
、*
インクルードドットファイルを作成するという副作用があります。または、を設定できますがGLOBIGNORE='.*'
、その後.*
は何にも一致しません。
おそらく、あなたはglobignoreに関するbash拡張の機能を意味します。デフォルトでは、bash拡張は一致します。そして..しかし男を読む:
The GLOBIGNORE shell variable may be used to restrict the set of file names matching
a pattern. If GLOBIGNORE is set, each matching file name that also matches one of
the patterns in GLOBIGNORE is removed from the list of matches. The file names ``.''
and ``..'' are always ignored when GLOBIGNORE is set and not null. However, setting
GLOBIGNORE to a non-null value has the effect of enabling the dotglob shell option,
so all other file names beginning with a ``.'' will match. To get the old behavior
of ignoring file names beginning with a ``.'', make ``.*'' one of the patterns in
GLOBIGNORE. The dotglob option is disabled when GLOBIGNORE is unset.
変数を設定して、GLOBIGNORE=.:..
次のような情報を提供できます。
rm -r * .*
現在のディレクトリのみを削除します。POSIX標準はそれだけを指定します。は現在のディレクトリであり、現在のディレクトリの親にある。。*の特別な意味は、bashまたはその他のシェル(またはgrepのようなプログラム)によって解釈されます。
私の知る限り、LSB 4.1にはは必要bash
ありませんsh
。
以下のためにsh
、それはPOSIXを次の(1つのマイナー非関連の拡張子を持ちます)。
bash
必ずしもPOSIXに準拠しているとは限りません。として呼び出された場合のみsh
。