package-0.0.1.jar과 같은 패키지 이름이 있고 해당 문자열에서 버전 정보와 .jar로 끝나는 파일을 제거해야 합니다. 이 목표를 어떻게 달성할 수 있나요? "%" 기호를 사용하여 문자열의 일부를 잘라낼 수 있다는 것을 발견했습니다. 그래서 나는 노력했다
JNAME="package-0.0.1.jar"
CLEAN="${JNAME%-.*\.jar}"
그러나 CLEAN 뒤에는 전체 JNAME 콘텐츠가 있으므로 이는 작동하지 않는 것 같습니다. % 기호 다음의 올바른 순서는 무엇입니까?
답변1
%
/를 사용한 확장은 #
정규 표현식을 사용하지 않으며 쉘 글로브를 사용합니다. -*.jar
버전과 접미사를 일치시키는 데에만 사용됩니다 .
CLEAN=${JNAME%-*.jar}
정규 표현식이 필요한 경우 Bash의 [[ a =~ b ]]
합계를 사용할 수 있습니다 ${BASH_REMATCH[…]}
(이 경우에는 필요하지 않지만).
if [[ $JNAME =~ ^(.+)-[^-]+\.jar$ ]]; then
CLEAN=${BASH_REMATCH[1]}
fi
답변2
또 다른 접근 방식은 이 목적을 위한 것입니다 awk
(이름이 대시로 끝나기를 원한다고 가정).
CLEAN=$(printf '%s' "$JNAME" | awk -F- '{print $1}')