2012-09-14 3 views
0

입니다. for bash for loop가 있으며 명령을 실행하려고합니다. 루프가있어서 다른 파일 이름을 실행할 수 있습니다.Bash for 루프와 관련된 파일 이름이

파일은 다음과 같습니다

crystal0_cmin.pdb 
crystal1_cmin.pdb 
. 
. 
. 

루프는 다음과 같습니다

cp: cannot stat `Files/crystal.pdb': No such file or directory 
cp: cannot stat `Files/crystal.psf': No such file or directory 

하지만 난을 지정하지 :

for ((i=0;i<=10;i++)) 
do 
cp Files/crystal$i_cmin.pdb Energy/ 
cp Files/crystal$i_cmin.psf Energy/ 
done 

문제는 항상 다음과 같은 오류 메시지가 있다는 것입니다 crystal.pdb 및 crystal.psf를 제출하십시오. 그것은 단지 모든 i에 대한 $ i 확장을 무시합니다. 즉, 어떤 파일도 복사되지 않습니다.

아무도 내가 이것을 고칠 수있는 방법을 알고 있습니다.

감사합니다.

+2

할 쉽습니다 :'CP 파일/크리스탈 {루프는 전혀 브레이스 확장에 의해 생성 된 파일의 목록 이 파일 목록으로 사용할 수 있기 때문에 직접 cp (윌리엄의 코멘트)에 을 통과 0..10} _cmin.p {db, sf} 에너지' –

답변

5

문제는 bash가 $i_cmin을 변수로 해석하고 있다는 것입니다. 이 문제를 해결하려면 사용 $i 변수이며, 이와 같이 해석되어야한다는 것을 배쉬에게 중괄호 :

즉각적인 수정 아담에 의해 제안 i에 매개 변수 이름을 제한하기 위해 괄호를 사용하는 것입니다
cp Files/crystal${i}_cmin.pdb Energy/ 
cp Files/crystal${i}_cmin.psf Energy/ 
2

:

for ((i=0; i<=10; i++)); do 
    cp Files/crystal${i}_cmin.pdb Energy/ 
    cp Files/crystal${i}_cmin.psf Energy/ 
done 

다음 단계는 생성 된 파일 이름을 반복하기 위해 for-loop C 스타일을 사용할 필요가 없다는 것을 인식하는 것입니다. 직접 원하는 파일을 반복 중괄호 확장 을 사용할 수 있습니다 (이 루프와 윌리엄의 의견 사이의 중간 지점 은 다음과 같습니다

for f in Files/crystal{0..10}_cmin.p{db,sf}; do 
    cp "$f" Energy/ 
done 

마지막 단계는 당신이 for- 필요하지 않습니다 실현하는 것입니다

cp Files/crystal{0..10}_cmin.p{db,sf} Energy/