확장된 쉘 변수를 제거하는 데 사용되는 백분율 기호

확장된 쉘 변수를 제거하는 데 사용되는 백분율 기호
for file in *.pdf ; do
    newname=${file%\\.\*}
done

%\.*파일 확장자를 제거하는 방법을 이해할 수 없습니다 . 누군가가 방법을 안내해 줄 수 있습니까?

답변1

%\.*파일 확장자를 제거하는 방법을 모르겠습니다.

그렇지 않기 때문입니다. :) 작성한 코드가 잘못되어 유용한 기능을 수행하지 못합니다.

${variable%pattern}허용 $variable하고 제거 하는 표준 쉘 확장이 있습니다.가장 짧은끝에 일치하는 블록이 있습니다 pattern(비슷한 확장자가 있으며 ${variable%%pattern}제거됨).가장 긴성냥). 그러나 pattern이는 쉘 글로브여야 하며 위 코드 작성자는 이를 정규 표현식으로 의도한 것 같습니다.

올바른 형식은 다음과 같습니다. ${file%.*}.오른쪽의 모든 항목을 제거하면 작동합니다.맨 오른쪽가리키다. 대신 ${file%%.*}오른쪽에 있는 모든 항목을 삭제하세요.맨 왼쪽가리키다. 예를 들어, if 는 file=/some/very.long.directory.name/foo.pdf${file%.*}확장되고 /some/very.long.directory.name/foo${file%%.*}확장됩니다 /some/very.

관련 정보