首页 > 解决方案 > 如何正确传递带有空格的字符串作为单独的命令行参数?

问题描述

例如,如果我想重命名文件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被认为是第三个参数。从字符串扩展后,字符似乎喜欢"\失去了它们的特殊含义。

如何正确传递带有空格的字符串作为单独的命令行参数?在这种情况下,有没有办法指定old并且name应该组合在一起?

谢谢!

标签: bash

解决方案


数组被添加到语言中正是为了解决这个用例(不是作为通用容器):

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

推荐阅读