매개변수 확장 삽입 컷인 파일

매개변수 확장 삽입 컷인 파일

매개변수 확장을 사용하여 마지막 구분 기호의 문자열을 자르고 싶습니다.

name='ls $(Build.ArtifactStagingDirectory)/drop/abc.jar'
string1="${name%/*}"
string2="${name##*/}"
echo "$string1"
$ echo "$string2"

출력해야지abc.jar

그런데 점점 더 많아지네요.jar

답변1

$name어느 시점에서 Windows 시스템에서 생성된 텍스트 파일에서 문자열의 시작 부분을 가져와서 .jar끝에 추가하면 abc문자열의 비트는 결국 동일하게 됩니다 .jar.

추출한 문자열에는 $string2다음 문자가 포함됩니다.

abc\r.jar

\r텍스트 캐리지 리턴 문자를 나타냅니다 .

출력을 사용할 때 echo커서는 캐리지 리턴 문자를 통해 줄의 시작 부분으로 돌아가고 마지막 커서는 .jar첫 번째 커서를 덮어쓰고 보이는 것만 abc남깁니다 ..jar

해결책은 초기 파일 이름을 제공하는 모든 파일을 DOS/Windows 텍스트 형식에서 Unix 텍스트 형식으로 변환하는 것입니다. dos2unix이는 변환 도구를 사용하여 수행하는 것이 가장 좋습니다 .

다음을 사용하여 문자열에서 모든 캐리지 리턴을 제거할 수도 있습니다.

string2=${string2//$'\r'/}

값을 출력하기 전에 쉘에서 bash또는 다음을 사용하여

tr -d '\r' <<<"$string2"

답변2

목표가 유효한 파일 이름에서 "abc.jar"을 얻는 것이라면 다음을 사용하십시오.기본 이름주문하다:

string2=`basename $name`

관련 정보