파일의 기본 이름을 추출하여 추가 작업을 수행하는 데 사용하는 스크립트가 있습니다. 이 명명 규칙(공백 및 문자 포함 - 무엇이 오류를 유발하는지 확실하지 않음)이 있는 파일과 함께 이 스크립트를 사용할 때만 기본 이름 추가 피연산자 오류가 발생합니다.
파일 이름: 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 .txt
return 을 용이하게 하기 위해 file
). JERASH - XZ 837367432.pdf
파일 이름이 몇 개의 단어로 나뉘어져 있는지 에 따라 4개의 인수를 제공합니다 .
대신 참조 $file
변수가 확장됩니다.
filenamenoext=$(basename "$file" .pdf)
( filenamenopath
나중에 다른 용도로 필요하지 않는 한 필수는 아닙니다.)
또한보십시오:
또한 printf
변수 데이터를 인쇄하는 데 사용되는 경우 형식 문자열을 사용하고 변수를 인용하십시오.
printf 'Filename without path: %s\n' "$filenamenopath"