0

我刚开始使用 bash,所以我希望答案并不明显。我有一个名为 playlists.txt 的文件,如下所示:

  • 冷冻Dubstep PLYNrAD9Jn2WDwRrS_Uw6UR55K-c_s6EH4
  • 经典 PLYNrAD9Jn2WDWZFpIG3a2tkOBtdeNAbc6
  • ChilledOut PLYNrAD9Jn2WCfrUCoS22kn3pBX1XUFinE
  • SlickSlickSound PLYNrAD9Jn2WDmpu3gNVxIVO8bAiOcQkx7
  • 专辑、音乐会 PLYNrAD9Jn2WD3BI8o5VjmSbhZgfYh5zaX

我想将每行的第一个字符串分配给 $name,将第二个字符串分配给 $hash,然后将其发送到 script.sh 并为每一行递归地执行此操作,因为知道将来行数可能会增加。

我写了这个但它不起作用:使用这个 ->如何在 bash shell 中将一个字符串拆分为多个变量?

while read name hash
do

        sh script.sh "$name" "$hash"

done < playlists.txt

我应该怎么做?先感谢您。

编辑:谢谢大家,所以我把它改成了这个,它更容易阅读。我以为,它会解决我的错误,但仍然存在......该死的。所以基本上,在 script.sh 中,这是第一部分:

cd ~/Music/Youtube\ Playlist/Playlists/$name

mv $HOME/Music/Youtube\ Playlist/Playlists/$name/TextRecords/lastoutput.txt $HOME/Music/Youtube\ Playlist/Playlists/lastoutput.txt

但是,shell 返回错误:

mv: cannot stat `/home/kabaka/Music/Youtube Playlist/Playlists//TextRecords/lastoutput.txt': No such file or directory

这意味着应该有播放列表名称的地方,什么都没有。你知道为什么吗?是不是因为我当前脚本中的 $name 和上面脚本中的 $name 不一样?请注意,对于 $hash,我也发生了同样的事情,它应该出现在 url 中,但只是空白

4

3 回答 3

1
  1. 您可以使用管道将 echo 命令的输出用作输入文件,
  2. 标志 '-d' 定义了 'cut' 命令的分隔符。

这是代码:

while read line
do
    name=`echo $line|cut -f1 -d' '`
    hash=`echo $line|cut -f2 -d' '`
    sh script.sh $name $hash

done < playlists.txt

对于您的第二个问题:在将文件移动到目录之前,请确保它存在。您可以使用 'mkdir -p' 创建它,如下所示:

mkdir -p $HOME/Music/Youtube\ Playlist/Playlists/lastoutput.txt
于 2013-01-29T20:20:30.800 回答
1

它接近工作,只是说read name hash而不是read line

while read name hash; do
    sh script.sh "$name" "$hash"
done < playlists.txt
于 2013-01-29T20:07:25.963 回答
-1

你快到了,有几种方法可以做到这一点,但一个典型的解决方案是

while read name hash
do
     sh script.sh $name $hash 
done < playlists.txt

IHTH

于 2013-01-29T20:08:32.770 回答