2010-07-09 54 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