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

Vnd*_*tta 3 command-line bash scripts

我正在制作一个程序,该程序使用保存在变量中的一组文件启动 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!!
Run Code Online (Sandbox Code Playgroud)

那么我做错了什么?顺便说一句,我需要间隔命名文件的引号

谢谢。


这是我设置启动器的方法:

我有一个包含要复制的文件的选定文件夹的数组,然后我创建这些文件夹的文件数组:

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
Run Code Online (Sandbox Code Playgroud)

str*_*ngs 5

如果你想在 bash 中使用文件列表,你最好使用数组,我的猜测是 vlc 将文件列表视为一个参数而不是单独的参数,

"/foo /bar" 与 "/foo" "/bar" 不一样

试试这个。

LAUNCHER=("/home/foo.mp4" "/home/bar.mp4")

vlc "${LAUNCHER[@]}"
Run Code Online (Sandbox Code Playgroud)

引用数组扩展可以避免对间隔命名的文件名的误解

另一种选择是使用 xargs。如果您解释如何获得 LAUNCHER 的值(如果我没看错的话)会有所帮助。