我正在研究以## ARTIST - TRACK.flac格式获取flac文件的脚本,并且正确地从文件名和标签中提取信息。我也有一些手动输入其他信息的标志。问题是曲目名称没有正确标记。看起来,它停止在第一个白色空间,不管我的引用技术如何,然后抛出一堆其他的东西。您会注意到,在标记之前我会回显出trackname变量,以确保变量是正确的,但标记仍然是关闭的。感谢您的帮助(和任何其他指针)提前!难以在bash脚本中正确传递一个变量
#!/bin/bash
#
# A flac tagging script
#
while getopts :l:y:s:h opt ;
do
case $opt in
l) ALBUM="--set-tag=ALBUM=${OPTARG}" ;;
y) YEAR="--set-tag=YEAR=${OPTARG}";;
s) SOURCE="--set-tag=SOURCE=${OPTARG}" ;;
h) echo >&2 "tags flac files in folder with arguments: -r [artist] -l [album] -y [year] -s [source (cdr, promot, etc)]" ;;
esac
done
shift $((OPTIND-1))
if [ "$1" ]
then
for file
do
if [ -e "$file" ]
then
echo >&2 "Tagging file: "$file""
filename=$(basename "$file")
extension="${filename##*.}"
filename="${filename%.*}"
TRACKNAME="${filename##*- }"
trackartist="${filename% -*}"
TRACKNUMBER="${trackartist% *}"
ARTIST="${trackartist##* }"
echo >&2 "$TRACKNAME"
metaflac \
--set-tag=ARTIST=$ARTIST\
--set-tag=TITLE=$TRACKNAME \
--set-tag=TRACKNUMBER="$TRACKNUMBER" "$ALBUM" "$YEAR" "$SOURCE"\
"$file"
else
echo >&2 "No such file: "$1""
exit 1
fi
done
else
echo >&2 "Usage: "$(basename "$0")" INPUTFILE [...]"
exit 1
fi
我不知道我理解的问题。它停在哪个空间? – Barmar 2014-11-08 22:32:17
'$ ARTIST'或'$ TRACKNAME'是否可以包含空格?然后你需要在'--set-tag ='参数中引用它们。 – Barmar 2014-11-08 22:33:26