ped*_*ram 6 bash shell-script wildcards
假设我在当前目录中有文件 xinitrc、alphabetsoup、ieat.pie。需要一个 bash 脚本来仅选择 xinitrc 和字母汤。
bash 扩展 glob+([^.])
将匹配.名称中没有任何文件的文件。它要求您没有取消设置shopt extglob
(在现代 bash 安装中,它应该默认设置)。该模式意味着:
任意数量(但至少一个)字符,除了 .
您可以将所有文件名放在一个数组中:
NO_EXTENSION=( +([^.]) )
Run Code Online (Sandbox Code Playgroud)
您可以打印文件名:
printf "%s\n" +([^.])
Run Code Online (Sandbox Code Playgroud)
或者将它们全部传递给实用程序:
ls -- +([^.])
Run Code Online (Sandbox Code Playgroud)
如果您希望它们在变量中而不是数组中,则需要非常确定文件名中没有空格。如果你绝对肯定这一点,你可以这样做:
NO_EXTENSION=$(echo +([^.]))
Run Code Online (Sandbox Code Playgroud)
与数组情况不同,需要调用 echo 才能进行路径名扩展。我强烈建议对此类列表使用数组,因为您不必担心文件名中的特殊字符。
您可以使用以下命令获取工作目录中名称中没有句号的文件列表:
find . -maxdepth 1 ! -name "*.*"
Run Code Online (Sandbox Code Playgroud)
您还可以拥有.file
unix 下的文件,如果您想匹配那些 and file
,但不匹配,file.ext
则可以使用:
find . -maxdepth 1 ! -name "*.*" -o -name ".*[^.]*"
Run Code Online (Sandbox Code Playgroud)