アクションはLSB、POSIX、またはその他の仕様に.*
含まれて.
定義されていますか?..
答え1
から引用シングルUnix仕様バージョン2、ボリューム「コマンドとユーティリティ」、§2.13.3:
ファイル名がピリオド(
.
)で始まる場合は、ピリオドをパターンの最初の文字として使用するか、スラッシュ文字の直後にピリオドを明示的に一致させる必要があります。 (…)角括弧式一致リストの明示的なピリオドは指定されていません(たとえば、[.abc]
ファイル名の前のピリオドが一致できるかどうか)。
例外なしでの2番目のピリオド..
または唯一のピリオドの後の空の文字列は、.
ワイルドカード文字と一致しません.*
。だから標準は言う.*
一致し.
て..
、しかしこれは迷惑かもしれませんが。
上記の段落では、sh
シェル(コマンド)の動作について説明します。 Cライブラリ関数セクションでは、glob
この節を引用します。
言語は全く同じです。バージョン3、POSIX:2001およびIEEE 1003.1-2001とも呼ばれ、これはほとんどの最新システムが実装しています。
Dash、bash、ksh93はPOSIXと互換性があります。 Pdkshとzsh(下でもemulate sh
)はそうではありません。
kshでは設定をスキップして.*
設定.
できますが、これはドットファイルを含む副作用があります。または設定できますが、何も一致しません。..
FIGNORE='.?(.)'
*
FIGNORE='.*'
.*
Bashでは設定をスキップして.*
設定.
できますが、ドットファイルを含む副作用があります。または設定できますが、何も一致しません。..
GLOBIGNORE='.:..'
*
GLOBIGNORE='.*'
.*
答え2
おそらくあなたはbash拡張のglobigore機能に言及しているでしょう。デフォルトでは、bash拡張は.and..と一致しますが、次の内容をお読みください。
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などのプログラム)によって解釈されます。
答え3
これLinuxのマニュアルページPOSIX.2、3.13を参照してください。
答え4
私が知る限り、LSB 4.1は必須ではなくbash
必須ですsh
。
~のためsh
POSIXに従ってください。(関連していないマイナーな拡張を含む)。