首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bash Use中使用字符串作为参数

在bash Use中使用字符串作为参数
EN

Stack Overflow用户
提问于 2015-09-22 17:12:34
回答 4查看 103关注 0票数 1

尝试编写使用vlc创建播放列表的脚本。

代码语言:javascript
复制
#!/bin/bash
filename=/media/*/*.mp3
while [ "$1" != "" ]; do
   case $1 in
       -f | --filepath )       shift
                               filename=$1
                               ;;
       -h | --help )           usage
                               exit
                               ;;
       * )                     usage
                               exit 1
   esac
   shift
done
#echo $filename
vlc $filename  --novideo --quiet

此脚本正在运行,但它只在任何usb设备的根目录中找到mp3文件。所以我想要更改文件名变量。这段代码给出了类似的结果,但它列出了每一项。

代码语言:javascript
复制
filename=$(find /media/* -name *.mp3 -print)
filename=$(tr '\n' ' ' <<<$filename)

现在的问题是,我不能把它当作一个论据。我试过:

代码语言:javascript
复制
vlc $filename --novideo --quiet
or
vlc $*filename --novideo --quiet
or
vlc "$filename" --novideo --quiet

什么都没用。有什么建议吗?

更新:

伙计们,我需要帮助的问题是如何使vlc接受文件名变量作为参数或文件的参数,以便在播放列表中使用。文件名

代码语言:javascript
复制
/media/MULTIBOOT/Linkin Park - In The End.mp3 /media/MULTIBOOT/Man with a  
Mission ft. Takuma - Database.mp3 /media/MULTIBOOT/Sick Puppies - You're
Going Down.mp3 /media/MULTIBOOT/Skillet - Rise.mp3 /media/MULTIBOOT/Song
Riders - Be.mp3 /media/MULTIBOOT/30 Seconds to Mars - This is War.mp3  
/media/MULTIBOOT/Fade - One Reason.mp3

现在这是一个字符串,如何使用它的文件路径参数?

EN

回答 4

Stack Overflow用户

发布于 2015-09-22 17:24:58

我将使用bash的递归全局和数组:

代码语言:javascript
复制
#!/bin/bash
shopt -s globstar nullglob
files=()
while [[ $1 ]]; do
   case $1 in
       -f | --filepath )       shift
                               files+=("$1")
                               ;;
       -h | --help )           usage
                               exit
                               ;;
       * )                     usage
                               exit 1
   esac
   shift
done
if [[ ${#files[@]} -eq 0 ]]; then
    files=( /media/**/*.mp3 )
    if [[ ${#files[@]} -eq 0 ]]; then
        echo "no mp3 files found"
        exit 1
    fi
fi
#printf "%s\n" "${files[@]}"
vlc "${files[@]}"  --novideo --quiet

使用此代码,您可以多次指定-f filename来播放几首歌曲。

票数 3
EN

Stack Overflow用户

发布于 2015-09-22 17:18:35

你需要引用*.mp3的话。否则,它将在当前目录中展开。

代码语言:javascript
复制
filename=$(find /media/* -name '*.mp3' -print)

您也不需要删除换行符。如果不引用变量,则所有空格(包括换行符)都将转换为单词分隔符。

票数 1
EN

Stack Overflow用户

发布于 2015-09-22 17:25:08

与其将所有文件名存储在变量中,不如告诉find使用所有文件调用应用程序。这将防止空格、换行符等方面的问题:

代码语言:javascript
复制
 find /media -name '*.mp3' -exec vlc --novideo --quiet \{\} \+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32722900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档