我正在编写一个程序,使用一组保存在变量中的文件来启动 vlc。
但它不起作用,似乎名称有问题,奇怪的是(对我来说)最后问题总结如下:
echo $LAUNCHER
#"/home/.../file1.m4a" "/home/.../file2.m4a"
vlc $LAUNCHER
vlc $(echo $LAUNCHER)
#Doesn't work
vlc "/home/.../file1.m4a" "/home/.../file2.m4a"
# Works!!
那么我做错了什么?顺便说一句,我需要为带空格的命名文件添加引号
谢谢。
以下是我设置启动器的方法:
我有一个包含您要重现的文件的选定文件夹的数组,然后我创建这些文件夹的文件数组:
EXTENSION_STRING=".*(m4a|mp3|wma|flac)$"
for i in "${DIR_LIST[@]}"; do
while ISF= read -r -d $'\0' file; do
FILES_LIST+=( "$file" )
done < <(find "$i" -type f -regextype posix-extended -regex "$EXTENSION_STRING" -print0)
done
答案1
如果你想在 bash 中使用文件列表,那么最好使用数组,我猜 vlc 将文件列表视为一个参数而不是单独的参数,
“/foo /bar” 与 “/foo” “/bar” 不同
尝试一下这个。
LAUNCHER=("/home/foo.mp4" "/home/bar.mp4")
vlc "${LAUNCHER[@]}"
引用数组扩展可以避免对空格命名文件名的误解
另一个选择是使用 xargs。如果我没有看错的话,如果您解释一下如何获取 LAUNCHER 的值,那将会很有帮助。