매개변수 확장을 사용하여 마지막 구분 기호의 문자열을 자르고 싶습니다.
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`