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