我正在 Bash 脚本中尝试以下操作:
MV_PARAMS='"foo 1" "foo 2"'
mv $MV_PARAMS
我想要实际执行的是:
mv "foo 1" "foo 2"
但这似乎不起作用。尝试这个:
mv "$MV_PARAMS"
也不行。
答案1
你应该做的是使用数组:
mv_params=("foo 1" "foo 2")
mv "${mv_params[@]}"
数组扩展将正确处理带有空格或特殊字符的数组元素。
答案2
在 shell 脚本中处理文件名中的空格通常很复杂。在这种情况下,给出:
MV_PARAMS='"foo 1" "foo 2"'
当你写:
mv $MV_PARAMS
最终 shell 会mv
像这样运行:
execve("/usr/bin/mv", ["mv", "\"foo", "1\"", "\"foo", "2\""])
也就是说,有四个参数:
- “富
- 1"
- “富
- 2英寸
您可以使用以下eval
命令让 shell 解析生成的命令行:
eval "mv $MV_PARAMS"
这会做你想做的事。使用eval
有时可能很棘手,在eval
似乎是解决方案的情况下,我经常会尝试重写一些东西以避免需要它。