此 shell 脚本仅处理一个文件

This shell script processes only one file

我想将一个mp3文件的标题和标签设置为文件名。例如,如果 audio.mp3 是文件名,则应将 audio 设置为标题和标签标签。要处理所有以字母 P 开头的 mp3 文件,我想将 P*mp3 作为命令行参数传递。我的 shell 脚本是:

# mp3tag.sh
# Change title and label of mp3 files to file name
# Feb-25-2019

if [ $# -lt 1 ]; then
    echo file name missing. Wild cards OK
    exit 1
fi

for i in ; do 
    name=`echo $i | sed 's/....$//'` # Remove dot and mp3 from filename
    mp3info -t "$name" -l "$name" "$i"
    if [ $? -eq 0 ]; then
        echo Changed tags for "$i"
    else
        echo Error in changing tags for "$i"
    fi
done

此脚本仅处理目录中的第一个文件 P1.mp3,尽管我有 P1.mp3、P2.mp3 等文件......我去哪儿了错误的?请帮助

通配符文件名扩展由 shell 执行。当您的脚本运行时,shell 已经将 P*mp3 扩展到实际的文件名列表中,因此 </code> 只是第一个文件名。</p> <p>使用 <code>$* 代替