for l in ls - Unix语法

时间:2010-07-09 07:47:15

标签: regex unix

这有什么问题?

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

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

我错过了什么?

5 个答案:

答案 0 :(得分:4)

“错误”的是,没有必要使用外部ls命令列出您的文件并grep您的模式。只需使用shell。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

你的意思是

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

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

答案 3 :(得分:0)

这些不应该是反击吗?

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

答案 4 :(得分:0)

由于shell已经进行了文件名扩展,因此

grep是不必要的:

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

请注意,带有嵌入空格和类似内容的文件名会破坏此循环。

ls也可以避免修复前一个问题,但是当没有文件与模式匹配时,需要添加测试以防止处理非现有文件:

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