通过终端扩展问题启动包含多个文件的程序

通过终端扩展问题启动包含多个文件的程序

我正在编写一个程序,使用一组保存在变量中的文件来启动 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 的值,那将会很有帮助。

相关内容