Linux Bash脚本找不到[^。]

Linux Bash脚本找不到[^。],linux,bash,Linux,Bash,我有这个剧本: #!/bin/sh du -s */ [^.]*/ | sort -n | while read a; do echo $a; done | sed -r 's/^ *([ 0-9]{3})([ 0-9]{3})([ 0-9]{3}) *(.*)\/$/\1 \2 \3 \4/' 但出于某种原因,我得到了这个错误: du: cannot access `[^.]*/': No such file or directory 我错过了什么?我不知道我的剧本怎么了 谢谢你所说的[^

我有这个剧本:

#!/bin/sh
du -s */ [^.]*/ | sort -n | while read a; do echo $a; done | sed -r 's/^ *([ 0-9]{3})([ 0-9]{3})([ 0-9]{3}) *(.*)\/$/\1 \2 \3 \4/'
但出于某种原因,我得到了这个错误:

du: cannot access `[^.]*/': No such file or directory
我错过了什么?我不知道我的剧本怎么了


谢谢

你所说的
[^.]
是什么意思?如果您的意思是不包括点的正则表达式,那么它相当于
*/

在阅读时也
;一美元一个;完成
或多或少是不可操作的

编辑:根据评论:

(shopt -s dotglob ; eval du -s '*/')

默认情况下,Bash不支持regexp作为文件名模式

通常,以
开头的目录不包括在
*/
中。如果要包括保存的代码,请使用
?*/
(不包括
)。它并不完美(错过了
.X/
),但在大多数情况下已经足够好了

[EDIT]您可以使用
shopt-s extglob
启用regexp的一个子集(很荣幸指出这一点)


有关详细信息,请参阅。

while循环唯一要做的事情是将空格序列压缩到单个空格(因为
$a
未被引用),我希望显示所有文件夹及其大小。所以我不想要“.”和“.”。我明白了,我为您添加了真正的答案。您可能想要
*/
而不是
[^.]*/
bash
(版本≧4) 当然可以处理regex globbing:请参阅: