2012-05-07 4 views
3

나는 makefile을 쓰고 다음과 같은 것을 가지고 있다고 가정한다.쉘 매개 변수 확장 : 디렉토리 부분없이 파일 이름을 얻으려면 어떻게해야합니까?

FILES = file1.py \ 
    folder1/file2.py \ 
    folder2/file3.py 

내가 루프에 대해 다음 한 :

[email protected] file in $(FILES); do \ 
      echo $${file/folder1\/}; \ 
    done 

위의 인쇄합니다 :

file1.py 
file2.py 
folder2/file3.py 

을 내가 원하는 출력은 다음과 같습니다 제가했습니다

file1.py 
file2.py 
file3.py 

셸 확장 bu에 대한 몇 가지 문서를 보았다. 아직이 문제를 해결할 방법을 찾지 못했습니다. 올바른 출력을 얻기 위해 코드를 어떻게 변경해야하는지 알 수 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.

편집 : 구문은

+0

당신이'FILES ='라인의 백 슬래시를 잊어 버리셨습니까을? 에코 후 세미콜론을 잊어 버렸습니까? – Jens

+0

오 죄송합니다, 거기에 그들을 추가하는 것을 잊어 버렸습니다. 그러나 나는 makefile에서 그것들을 작성했습니다. 어떤 혼란에 대 한 미안. – user945216

답변

2

echo $${file##*/}를 사용해보십시오. 이렇게하면 마지막 슬래시까지 아무 것도없이 파일 이름 부분 만 제공됩니다.

+0

정말 고마워요! 그런데 내가 이것과 관련된 정보를 어디에서 찾을 수 있는지 알 수 있습니까? 온라인에서 유용한 자료를 찾지 못했습니다. 나는 이런 질문을 할 때마다 StackExchange에 대해 질문해야한다고 생각하지 않는다. – user945216

+1

"매개 변수 확장"아래의 sh/ksh/bash/zsh 설명서에 있어야한다. 'make '는'/ bin/sh'을 사용하고 로그인 쉘은 명령을 실행하지 않습니다. '/ bin/sh'는 위장의 bash일지도 모릅니다. 매개 변수 확장에 대한 POSIX 사양은 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02 – Jens

+0

입니다. 정보를 제공해 주셔서 감사합니다! – user945216

5

이미 옌스의 쉘 스타일의 대답 @ 인정했지만, 나는 make-style 솔루션을 제안합니다 :

[email protected] file in $(notdir $(FILES)); do \ 
     echo $${file}; \ 
done 
관련 문제