含める*の動作です。LSB、POSIX、またはその他の仕様で定義されていますか?


回答:


10

引用シングルUnixの仕様バージョン2、ボリューム「コマンド&ユーティリティ」、§2.13.3

ファイル名がピリオド(.)で始まる場合、パターンの最初の文字としてピリオドを使用するか、スラッシュ文字の直後にピリオドを使用して、ピリオドを明示的に一致させる必要があります。(…)[.abc]ファイル名の先頭のピリオドに一致できるなど、ブラケット式一致リストの明示的なピリオドが一致するかどうかは指定されていません。

の2番目のピリオド..、またはの唯一のピリオドに続く空の文字列.が、のワイルドカードと一致しない例外はありません.*。したがって、標準はとと.*一致...、そうかもしれませんが迷惑です。

上記の一節では、シェル(shコマンド)の動作について説明しています。globCライブラリ関数参照のセクションは、この一節を参照しています。

言語は、POSIX:2001およびIEEE 1003.1-2001とも呼ばれるバージョン3でもまったく同じです。これは、最新のシステムが実装しているものです。

Dash、bash、およびksh93はPOSIXに準拠しています。Pdkshとzsh(の下でもemulate sh)はサポートしていません。

kshでは、.*スキップ...設定してを設定できますがFIGNORE='.?(.)'、これには*インクルードドットファイルを作成するという副作用があります。または、を設定できますがFIGNORE='.*'、その後.*は何にも一致しません。

bashでは、.*スキップ...設定してを設定することができますがGLOBIGNORE='.:..'*インクルードドットファイルを作成するという副作用があります。または、を設定できますがGLOBIGNORE='.*'、その後.*は何にも一致しません。


注:bash必ずしもPOSIXに準拠しているとは限りません。として呼び出された場合のみsh
ストジー

4

おそらく、あなたは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のようなプログラム)によって解釈されます。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.