如何正确传递带有空格的字符串作为单独的命令行参数?

时间:2019-05-29 19:41:25

标签: bash

例如,如果我想重命名文件old_name new_name,则可以使用以下代码:

args='old_name new_name'
mv $args

但是,如果原始文件名是old name,则以下代码均无法正常工作:

args='"old name" new_name'
mv $args
# mv: target 'new_name' is not a directory
args='old\ name new_name'
mv $args
# mv: target 'new_name' is not a directory

new_name被识别为第三个参数。从字符串扩展后,像"\这样的字符似乎失去了特殊的含义。

如何正确传递带有空格的字符串作为单独的命令行参数?在这种情况下,是否可以指定oldname分组在一起?

谢谢!

1 个答案:

答案 0 :(得分:0)

将数组精确地添加到语言中以解决此用例(而不是作为通用容器):

args=("old name" "new name")
mv "${args[@]}"