基名额外操作数错误

基名额外操作数错误

我有一个脚本将尝试提取文件的基本名称,然后我用它做额外的工作。仅当将此脚本与具有此命名约定的文件(包括空格和字符 - 不确定是什么触发了错误)一起使用时,我才会收到基本名称额外操作数错误。

文件名称: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"

这是错误:

Break 1 基本名称:额外操作数“XZ”

答案1

该命令basename $file使用不带引号的变量。变量的值将被拆分为单独的参数(每个参数还将进行文件名匹配)并提供给实用basename程序。

该实用程序需要一个或两个参数。如果有两个参数,它将返回不带任何目录路径的文件名,并且还会从名称末尾删除第二个参数(以便basename path/to/file.txt .txt返回file)。您给它四个参数,因为这就是文件名JERASH - XZ 837367432.pdf分成的单词数。

相反,引用$file变量扩展:

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

(请注意filenamenopath,除非您稍后需要它用于其他用途,否则不需要)

也可以看看:

另外,当用于printf打印变量数据时,请使用格式字符串并引用变量:

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

相关内容