哦哦,我读了几页和问题,但我就是无法理解/完全理解它......
jdir0="$@" # /home/tor/subbackup/teest2/jjj
mv "$jdir0/subs/*.srt" /home/tor/subbackup/
mv:无法统计'/home/tor/subbackup/teest2/jjj/*.srt':没有这样的文件或目录
嗯,呃,是的,那里有一个 test2.srt ..
我看过几页有大量不同的解决方案,据我了解,这应该翻译为(第一个移动命令):
mv /home/tor/subbackup/teest2/jjj/subs/test2.srt /home/tor/subbackup/
这个在终端上工作得很好..
(第一个移动命令),但我无法让它在脚本中工作..我做错了什么?
答案1
jdir0="$@"
"$@"
扩展到全部脚本的位置参数/参数。当您将其分配给单个变量时,Bash 会将它们用空格连接起来。你可能只想$1
在这里。
mv "$jdir0/subs/*.srt"
变量扩展确实应该被引用,因为它可以防止分词,并且如果变量包含看起来像 glob 的东西,则可以防止通配符。但在这里,您可能希望硬编码的 glob 能够工作,所以它应该不是被引用。
因此,将星号留在引号之外,例如
mv "$jdir0"/subs/*.srt
或例如
mv "$jdir0/subs/"*.srt
两者的工作原理相同,使用您认为更好的变体。