2016-03-08 103 views
4

我想要写在bash的函数转发参数cp命令。 例如: 为输入庆典 - 围绕所有数组元素或参数与报价

<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 

我尝试的方法到的用途是所有参数存储在数组中,然后只与阵列运行cp命令一起。 像这样:

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

不幸的是,就像我已经说过了,因此复制失败,则不传输报价。

+0

参见[当环绕shell变量引号?](http://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-外壳变量) – tripleee

回答

-4

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

由于报价是居然有只告诉bash的东西,他们不被bash的认为是字符串的一部分。

如果你想在字符串中的报价,你可以用\逃避它告诉bash的是字符串的一部分。

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

他已经正确地引用了函数的自变量;他问的是如何使用函数内部的参数。 – chepner

+0

@chepner不,他不是。这正是他在功能上的问题。 cp获取不带引号的第一个参数,并将白色空格作为多个参数应该是一个参数。 – selalerer

+1

因为他没有正确引导数组扩展。强迫用户容纳不正确的代码是一个可怕的想法。 – chepner