bash – 用引号括住所有数组元素或参数

我想在bash中写一个将参数转发给cp命令的函数。 例如:用于input

 <function> "path/with whitespace/file1" "path/with whitespace/file2" "target path" 

我希望它实际上做到:

 cp "path/with whitespace/file1" "path/with whitespace/file2" "target path" 

但是,现在我正在实现:

 cp path/with whitespace/file1 path/with whitespace/file2 target path 

我尝试使用的方法是将所有参数存储在一个数组中,然后只需要将数组与命令一起运行。 喜欢这个:

 function func { argumentsArray=( "$@" ) cp ${argumentsArray[@]} } 

不幸的是,它不会像我已经提到的那样转移引号,因此复制失败。

就像$@ ,你需要引用数组扩展。

 func () { argumentsArray=( "$@" ) cp "${argumentsArray[@]}" } 

然而,阵列在这里没有任何用处。 你可以直接使用$@

 func () { cp "$@" } 

当你写"在你的代码告诉bash”我开始一个字符串“和下一个"说“我完成了字符串”。

由于引号实际上只是告诉bash的东西,他们不被bash认为是字符串的一部分。

如果你想要一个字符串中的一个引号,你可以用\来转义它来告诉bash它是字符串的一部分。

 <function> "\"path with whitespace/file1\""