2010-07-09 146 views
0

这是什么问题?for i in ls - Unix语法

for i in 'ls | grep '^[A-Z]......$' 
do 
echo $i 
done 

如果我只是使用命令ls | grep '^[A-Z]......$我得到的文件,我想

我缺少什么?

回答

0

你的意思

for i in `ls | grep '^[A-Z]......$'`;do echo $i;done 

? actully这是'和'之间的区别,限制在你的shell中,而不是正则表达式或操作系统问题。

+0

+1反引号,而不是你也可以使用'$(....)'替换命令。 请参阅http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html – 2010-07-09 08:03:44

+0

我仍然无法让这个工作? – matt123 2010-07-09 08:09:27

+1

不需要使用外部命令。看到我的答案 – ghostdog74 2010-07-09 08:43:02

0

不应该反引号吗?

for i in `ls | grep blahblahblah`; do echo $i; done 
1

当你使用反引号“'”,而不是单引号“'”反引号之间的程序的输出将被用作外壳输入,即

for i in `ls | grep '^[A-Z]......$'`;do echo $i;done 
4

的这是“错误的”,是不需要使用外部的ls命令来列出你的文件并grep你的模式。只需使用外壳。

for file in [A-Z]?????? 
do 
echo $file 
done 
0

grep是不必要的,因为外壳已经做文件名扩展:

for file in $(ls [A-Z]??????) 
do 
    echo $file 
done 

注意带空格和类似会打破这个循环的文件名。

ls可避免太固定前一个问题,而是一个测试需要再添加,以防止处理不存在的文件时,没有文件匹配的模式:

for file in [A-Z]?????? 
do 
[[ -f "$file" ]] && echo $file 
done