2010-07-09 3 views
0

무엇이 잘못 되었나요? 난 그냥 명령 ls | grep '^[A-Z]......$을 사용하는 경우for i - 유닉스 구문

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

나는 파일이 내가

내가 무엇을 놓치고 싶은거야?

답변

0

당신은

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

을 의미? actully 이것은`및 '사이의 차이이며, 쉘 내에서 제한되며 정규식 또는 OS 문제는 아닙니다.

+0

+1 당신은 또한 수를 명령 대체에'$ (....) '을 사용하십시오. http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html –

+0

아직도이 기능을 사용할 수 없습니까? – matt123

+1

외부 명령을 사용할 필요가 없습니다. 내 대답보기 – ghostdog74

0

그 역자이면 안됩니까?

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

당신은 역 따옴표 사용하는 경우 "`"대신 작은 따옴표 " '"는 역 따옴표 사이의 프로그램의 출력은 쉘의 입력으로 사용됩니다, 즉

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

을 "잘못된"것은 파일을 나열하고 패턴을 grep하기 위해 외부 ls 명령을 사용할 필요가 없다는 것입니다. 그냥 쉘을 사용하십시오. 공백이 루프를 끊을 유사한으로는 파일 이름

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

참고 :

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

grep는 쉘이 이미 파일 이름 확장을 같이 할 필요가 없습니다.

ls도 이전 문제를 해결 피할 수 있지만, 테스트는 어떤 파일 패턴과 일치하지 않는 경우가 아닌 기존 파일을 처리 방지하기 위해 추가해야합니다 : 역 따옴표의 대신

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