我想重命名一个名为" Hi Dude"的文件。到" Hi Bro"。
如果我在bash中运行以下命令,则可以正常工作。
mv Hi\ Dude Hi\ Bro
但是当我执行以下两个命令时:
arg="Hi\ Dude Hi\ Bro"
mv $arg
显示以下错误:
usage: mv [-f | -i | -n] [-v] source target
mv [-f | -i | -n] [-v] source ... directory
任何解决方案?我想为另一个bash脚本实现这个。
答案 0 :(得分:2)
mv
需要(至少)两个参数(用空格分隔)。
当您运行mv Hi\ Dude Hi\ Bro
时,Hi\ Dude
和Hi\ Bro
被识别为两个单独的参数,因为您发信号通知Bash不要通过转义它们来为空格赋予任何特殊含义。 (如果你没有逃避空间,那么会有四个参数)
如果要通过变量传递值,最简单的解决方案是使用两个变量,如下所示。
src="Hi Dude"
dst="Hi Bro"
mv "$src" "$dst"
这与mv "Hi Dude" "Hi Bro"
相同。双引号信号bash将整个内部视为一个单元。所以不要忘记双引号。否则它将是mv Hi Dude Hi Bro
,它会做一些完全不同的事情。