bash - 用引号括起所有数组元素或参数

时间:2016-03-08 13:27:20

标签: linux bash

我想在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=( "$@" )
    cp ${argumentsArray[@]}
}

不幸的是,它并没有像我之前提到的那样转移报价,因此复制失败。

1 个答案:

答案 0 :(得分:5)

就像$@一样,您需要引用数组扩展。

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

然而,阵列在这里没有用处;您可以直接使用$@

func () {
    cp "$@"
}