Cygwin
Cygwin:獲取路徑的儲存大小寫
Cygwin 以 Windows 的方式不區分大小寫,例如:
$ touch ABC; rstr=$(openssl rand -base64 12); echo $rstr; echo $rstr > AbC; cat abc dGRMOHqqoy0/nc96 dGRMOHqqoy0/nc96 $ ls | grep -i abc ABC
文件或目錄名稱中的字元大小寫被儲存,但在對其進行操作時會被忽略。
ABC
,AbC
然後abc
選擇相同的文件。對於給定的文件路徑或目錄路徑,是否有一種可靠的方法來獲取*儲存的大小寫?*grep 技巧很快變得非常麻煩。
在
zsh
中,並打開extendedglob
選項,您可以執行以下操作:$ set -o extendedglob $ printf '%s\n' (#i)path/to/file Path/to/FILE
path/to/file
與儲存的案例一起獲得。在
ksh93
:$ printf '%s\n' ~(i)path/to/file Path/to/FILE
(請注意,如果沒有匹配,它將擴展為
~(i)path/to/file
,ksh93 沒有與nomatch
or選項等效的選項,儘管當它不匹配時failglob
您可以使用它來擴展為空)~(Ni)path/to/file
在
bash
,和選項上extglob
,您可以執行以下操作:failglob``nocaseglob
$ shopt -s extglob failglob nocaseglob $ printf '%s\n' @(path)/@(to)/@(file) Path/to/FILE
沒有
extglob
,你也可以做printf '%s\n' [p]ath/[t]o/[f]ile
,雖然這更難可靠地自動化。(在任何情況下,shell 下的功能等同於 your
ls | grep -i
,也就是說,它必須讀取完整的目錄內容才能找到匹配的文件。請注意,與 for 一樣grep -i
,大小寫比較是根據語言環境進行的,它可能與方式不同NTFS 進行大小寫比較)