【发布时间】:2013-01-13 12:21:16
【问题描述】:
我刚开始使用 bash,所以我希望答案并不明显。 我有一个名为 playlists.txt 的文件,如下所示:
- ChilledDubstep PLYNrAD9Jn2WDwRrS_Uw6UR55K-c_s6EH4
- 经典 PLYNrAD9Jn2WDWZFpIG3a2tkOBtdeNAbc6
- ChilledOut PLYNrAD9Jn2WCfrUCoS22kn3pBX1XUFinE
- SlickSlickSound PLYNrAD9Jn2WDmpu3gNVxIVO8bAiOcQkx7
- 专辑、音乐会 PLYNrAD9Jn2WD3BI8o5VjmSbhZgfYh5zaX
我想将每行的第一个字符串分配给 $name 并将第二个字符串分配给 $hash,然后将其发送到 script.sh 并为每一行递归执行此操作,因为知道将来行数可能会增加.
我写了这个,但它不起作用: 使用这个 ->How to split one string into multiple variables in 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 中但只是空白
【问题讨论】:
-
请参阅下面的@DigitalRoss 解决方案。作为参考,您的代码不起作用的原因是您读取了一个名为
line的变量,但尝试拆分一个名为STR的变量。name=${line% *} hash=${line#* }会做到的。 -
您应该打开一个新问题,而不是不断修改现有问题。