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)
如果你想在 bash 中使用文件列表,你最好使用数组,我的猜测是 vlc 将文件列表视为一个参数而不是单独的参数,
"/foo /bar" 与 "/foo" "/bar" 不一样
试试这个。
LAUNCHER=("/home/foo.mp4" "/home/bar.mp4")
vlc "${LAUNCHER[@]}"
Run Code Online (Sandbox Code Playgroud)
引用数组扩展可以避免对间隔命名的文件名的误解
另一种选择是使用 xargs。如果您解释如何获得 LAUNCHER 的值(如果我没看错的话)会有所帮助。