2010-03-24 5 views
1

나는 sample.txt.pgp와 같은 문자열을 가지고 있으며 쉘 스크립트에서 sample.txt를 반환하려고합니다 (그러나 문자열 길이는 ".pgp"앞에있는 모든 문자가 달라질 수 있습니다). substr 함수가 있습니까? 마찬가지로, 내가 substr('sample.txt.pgp', -4, 0) 않았다면, 그것은 sample.txt를 반환해야합니까? 지금은 그렇지 않습니다. 그래서 문법이 잘못되었거나 substr이 함수가 아닌지 궁금합니다.쉘 스크립트에서 유닉스 substr?

답변

2

당신은 basename 사용할 수 있습니다

$ basename sample.txt.pgp .pgp 
sample.txt 

사용 역 따옴표 또는 $()을 변수에 결과를 넣어 원하는 경우 :

$ FILE=sample.txt.pgp 
$ VARIABLE=$(basename "$FILE" .pgp) 
$ echo $VARIABLE 
sample.txt 
+2

'-s suffix'표기법을 사용하는 것이 흥미 롭습니다. POSIX에 의해 표준화되지 않은; 고전적인 표기법은'$ (basename $ file .pgp)'(이름이 변수 '$ file'에 있다고 가정)입니다. –

+1

@Jonathan 네, 정말로! 나는 OS X 머신에서'man basename'을 그냥했고'-s' 옵션을 보았습니다. 그것은 좀 더 융통성이 있었고 (하나 이상의 문자열을 처리 할 수 ​​있음) POSIX가 아닌 것을 알지 못했습니다. 내 대답을 편집 할게. –

+1

수정 됨; 또한 파일 이름의 공백을 지원하기 위해 큰 따옴표를 사용했습니다. –

0

filename sample.txt.pgp은 sample.txt를 반환합니다. (사용 역 따옴표)

+0

나는 생각하지 않는다 나는이 명령이 내 시스템에 설치되어있는 것을 보았다. ... – Cascabel

+1

@ Jefromi : 나는 그들이'basename'을 언급하고 있다고 생각한다. –

+0

아, 그래. basename – Cheeso

3
a='sample.txt.pgp' 
echo ${a%.*} # sample.txt (minimal match) 
echo ${a%%.*} # sample  (maximal match) 
+0

이것은 흥미로운 것 같습니다 ... 달러 기호는 무엇이며 %는 무엇을 나타 냅니까? 이걸 설명하는 페이지가 있습니까? – TwixxyKit

+0

@KnockKnockWhosThere : 자세한 정보는 http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02을 참조하십시오. :-) –

+2

더 제약이있는 버전 :'$ {a % .pgp}'는'.pgp' 확장자가 있으면 제거합니다. 원본은 확장 기능을 전혀 제거하지 않습니다 (어떤 경우에는 유용 ​​할 수 있습니다). –

관련 문제