一尘不染

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

linux

我想在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[@]}
}

不幸的是,它没有像我已经提到的那样传递引号,因此复制失败。


阅读 201

收藏
2020-06-03

共1个答案

一尘不染

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

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

但是,该数组在这里没有任何作用。您可以$@直接使用:

func () {
    cp "$@"
}
2020-06-03