기본 이름 추가 피연산자 오류

기본 이름 추가 피연산자 오류

파일의 기본 이름을 추출하여 추가 작업을 수행하는 데 사용하는 스크립트가 있습니다. 이 명명 규칙(공백 및 문자 포함 - 무엇이 오류를 유발하는지 확실하지 않음)이 있는 파일과 함께 이 스크립트를 사용할 때만 기본 이름 추가 피연산자 오류가 발생합니다.

파일 이름: JERASH - XZ 837367432.pdf

여기 스크립트는 실행되면 오류를 생성합니다.

filetimestamp=$(date "+%F-%T")
timenow=$(date -u)

    for file in files/input/*
    do

     printf "Break 1 \n" 
     #filename no extension:
     filenamenopath=$(basename $file)
     filenamenoext=${filenamenopath%.pdf}
     printf "Break 2 \n"
     #check if file is pdf

     printf "File Name with No Path:" $filenamenopath
     printf "Break 3 \n"

오류는 다음과 같습니다.

중단 1 기본 이름: 추가 피연산자 "XZ"

답변1

이 명령은 basename $file따옴표 없이 변수를 사용합니다. 변수의 값은 별도의 매개변수로 분할되어(각 매개변수도 파일 이름 일치를 거칩니다) 유틸리티에 제공됩니다 basename.

이 유틸리티에는 하나 또는 두 개의 매개변수가 필요합니다. 두 개의 인수가 있는 경우 디렉터리 경로 없이 파일 이름을 반환하고 이름 끝에서 두 번째 인수도 제거합니다( basename path/to/file.txt .txtreturn 을 용이하게 하기 위해 file). JERASH - XZ 837367432.pdf파일 이름이 몇 개의 단어로 나뉘어져 있는지 에 따라 4개의 인수를 제공합니다 .

대신 참조 $file변수가 확장됩니다.

filenamenoext=$(basename "$file" .pdf)

( filenamenopath나중에 다른 용도로 필요하지 않는 한 필수는 아닙니다.)

또한보십시오:

또한 printf변수 데이터를 인쇄하는 데 사용되는 경우 형식 문자열을 사용하고 변수를 인용하십시오.

printf 'Filename without path: %s\n' "$filenamenopath"

관련 정보