C-壳:的foreach LS不能检测文件名以破折号/连字符( - )
问题描述:
我有交流外壳脚本,滤波器,用于如下面条件的文件: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文件的输出。 但是,如果我尝试运行脚本,该脚本没有检测到( - )文件甚至很难满足过滤器。 为什么?
答
老实说,我不明白为什么,但这个工程:
foreach file (`ls *_[+--]*[A-D]*.txt`)
所以做到这一点:
foreach file (`ls *_[--+]*[A-D]*.txt`)
你会觉得我不小心包括,
字符搁置+
之间和-
在ASCII表上,对吗?不。该脚本没有拿起我的示例文件,Reflow_,77D123ab.txt
。
csh的文档明确指出,将短划线放在字符类的开头将代表一个字面短划线(并且还有一些版本的csh在最后接受短划线),但也许这是一个错误+
是一个量词,或者它只是需要超过2个字符才能正常工作。
这个很好用.. – larrey