Shell
.* 的行為是否包括 .和 .. 在 LSB 或 POSIX 或其他一些規範中定義?
是否在 LSB 或 POSIX 或其他規範
.*
中包含.
和定義的行為?..
引用Single Unix 規範版本 2,卷“Commands & Utilities”,§2.13.3:
如果文件名以句點 (
.
) 開頭,則必須通過使用句點作為模式的第一個字元或緊跟在斜杠字元之後來顯式匹配句點。(…) 未指定括號表達式匹配列表中的顯式句點是否[.abc]
可以匹配文件名中的前導句點。沒有例外,會使 in 中的第二個句點
..
或唯一句點 in 後面的空字元串.
與萬用字元 in 不匹配.*
。因此,標准說**.*
匹配.
and..
**,儘管它可能很煩人。上面的段落描述了 shell(
sh
命令)的行為。C 庫函式部分參考了glob
這段話。版本 3中的語言完全相同,也稱為 POSIX:2001 和 IEEE 1003.1-2001,這是大多數目前系統實現的。
Dash、bash 和 ksh93 符合 POSIX。Pdksh 和 zsh (甚至在 下
emulate sh
)沒有。在 ksh 中,您可以通過設置進行
.*
跳過.
和..
設置,但這會產生包含點文件FIGNORE='.?(.)'
的副作用。*
或者你可以設置FIGNORE='.*'
,但.*
不匹配任何東西。在 bash 中,您可以通過設置進行
.*
跳過.
和..
設置,但這會產生包含點文件GLOBIGNORE='.:..'
的副作用。*
或者你可以設置GLOBIGNORE='.*'
,但.*
不匹配任何東西。