2017-08-14 78 views
2

我有交流外壳脚本,滤波器,用于如下面条件的文件:C-壳:的foreach LS不能检测文件名以破折号/连字符( - )

*_[+-]*[A-D]*.txt 

文件的实施例:

Reflow_-12_A124er.txt

我的如下脚本:在d

#!/bin/csh -f 

cd /data 
foreach file (`ls *_[+-]*[A-D]*.txt`) 
echo "file: " $file 
gzip $file 
end 

,如果我尝试命令ls *_[+-]*[A-D]*.txt ata文件夹中,有txt文件的输出。 但是,如果我尝试运行脚本,该脚本没有检测到( - )文件甚至很难满足过滤器。 为什么?

回答

0

老实说,我不明白为什么,但这个工程:

foreach file (`ls *_[+--]*[A-D]*.txt`) 

所以做到这一点:

foreach file (`ls *_[--+]*[A-D]*.txt`) 

你会觉得我不小心包括,字符搁置+之间和-在ASCII表上,对吗?不。该脚本没有拿起我的示例文件,Reflow_,77D123ab.txt

csh的文档明确指出,将短划线放在字符类的开头将代表一个字面短划线(并且还有一些版本的csh在最后接受短划线),但也许这是一个错误+是一个量词,或者它只是需要超过2个字符才能正常工作。

+0

这个很好用.. – larrey