我想在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\""