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

ファイルまたはディレクトリ名の大文字と小文字は保存されますが、操作するときは無視されます。

ABCAbC選択し、abc同じファイルを選択します。

与えられたファイルパスまたはディレクトリパスの大文字と小文字を取得する安定した方法はありますか?別の名前で保存しますか?grepトリックは非常に迅速に非常に面倒になることができます。

ベストアンサー1

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

(一致するものがない場合は展開されます。ksh93には対応するアイテムやオプションは~(i)path/to/fileありませんが、一致するものがない場合はnullに拡張するために使用できます。)nomatchfailglob~(Ni)path/to/file

bashオプションがオンの場合は、次のことができます。extglobfailglobnocaseglob

$ shopt -s extglob failglob nocaseglob
$ printf '%s\n' @(path)/@(to)/@(file)
Path/to/FILE

それ以外の場合はextglobこれを行うことができますが、printf '%s\n' [p]ath/[t]o/[f]ile確実に自動化することはより困難です。

(とにかくシェルはと同じことを行います。ls | grep -iつまり、一致するファイルを見つけるにはディレクトリ全体の内容を読む必要がありますgrep -i

おすすめ記事