![如何用单/双引号(“\'或\”)包裹命令 1 返回字符串以提供给下一个命令 2?](https://linux22.com/image/597098/%E5%A6%82%E4%BD%95%E7%94%A8%E5%8D%95%2F%E5%8F%8C%E5%BC%95%E5%8F%B7%EF%BC%88%E2%80%9C%5C'%E6%88%96%5C%E2%80%9D%EF%BC%89%E5%8C%85%E8%A3%B9%E5%91%BD%E4%BB%A4%201%20%E8%BF%94%E5%9B%9E%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%BB%A5%E6%8F%90%E4%BE%9B%E7%BB%99%E4%B8%8B%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4%202%EF%BC%9F.png)
例如我想用 mplayer 播放几个目录的音乐,在 bash 中输入如下内容:
$find './l_music/La Scala Concert 03 03 03' './l_music/Echoes The Einaudi Collection' './l_music/Ludovico Einaudi - The Royal Albert Hall Concert [2 CD] (2010)' -name '*.mp3' | xargs mplayer
嗯,您知道,find 命令返回路径,其中目录和文件总是有空格,管道右命令 mplayer 不接受那些 mp3 路径。
我认为如果将 find 返回的字符串用单/双引号 (\'或\") 括起来并传递给 mplayer,问题就会得到解决。
但是我该如何解决问题,只使用 bash 命令,不要使用 bash 或 perl 脚本,同时可以给我一个 perl 行命令使用 Perl 命令行选项。
答案1
使用-print0
选项寻找它将使用空字符而不是空格来分隔文件名。
在参数使用-0
告诉它作为输入接收的文件名由空值分隔。
您的示例命令将变为:
find './l_music/La Scala Concert 03 03 03' './l_music/Echoes The Einaudi Collection' './l_music/Ludovico Einaudi - The Royal Albert Hall Concert [2 CD] (2010)' -name '*.mp3' -print0 | xargs -0 mplayer