首页 > 解决方案 > 如何将文本文件中的随机行分配给变量?

问题描述

我的代码有问题。

为了让我的程序正常工作,我需要提供一个带有多个网页链接(YouTube 链接)的变量,因为它是一个音乐播放器。问题是我必须将链接添加到代码的方式非常不干净:

# This is the variable to which I have to add the values ​​in the form of links
items=(
    "https://www.youtube.com/watch?v=YnmEePUXLRs"
    "https://www.youtube.com/watch?v=3vVSBLkpO-8"
    "https://www.youtube.com/watch?v=iPKJUzkTt6Y"
)

# Variable "Size", i use "size" to I use this variable to count the number of links
# there are
size=${#items[@]}
randomindex=$(($RANDOM % $size))

mpv ${items[$randomindex]}

我想要的是能够从文本文件中提取所有链接,并且代码可以直接从文件中读取它们。

问题是,正如您所看到的,size我使用它来计算它拥有的链接数,因此使用该变量randomindex能够创建一个随机数"${items[$randomindex]}",我不确定如果我提取它们它是否仍然可以工作从文本文件。

我怎样才能做到这一点?

更新 我使用“if”来命名歌曲名称:

mpv $(shuf -n1 .MRIndie_links)

CANCION=$(shuf -n1 .MRIndie_links)

if [ "$CANCION" == "https://www.youtube.com/watch?v=YnmEePUXLRs" ]
then
    echo 
     echo -e "\e[91m------------------------------------------------------"
        echo -e "\e[1mThis was: The Less i Know the Better - Tame Impala" | lolcat
     echo -e "\e[91m------------------------------------------------------"
         echo
fi

但它不起作用......为什么?

标签: bashshellvariables

解决方案


您可以shuf为此使用命令:

$ cat links
https://www.youtube.com/watch?v=YnmEePUXLRs
https://www.youtube.com/watch?v=3vVSBLkpO-8
https://www.youtube.com/watch?v=iPKJUzkTt6Y
$ shuf -n1 links
https://www.youtube.com/watch?v=iPKJUzkTt6Y

在你的脚本中,你会像这样使用它

mpv "$(shuf -n1 links)"

推荐阅读