Reputation: 3399
I want to write a function in bash that forwards arguments to cp
command.
For example:
for the input
<function> "path/with whitespace/file1" "path/with whitespace/file2" "target path"
I want it to actually do:
cp "path/with whitespace/file1" "path/with whitespace/file2" "target path"
But instead, right now I'm achieving:
cp path/with whitespace/file1 path/with whitespace/file2 target path
The method I tried to use is to store all the arguments in an array, and then just run the cp command together with the array. Like this:
function func {
argumentsArray=( "$@" )
cp ${argumentsArray[@]}
}
unfortunately, It doesn't transfer the quotes like I already mentioned, and therefore the copy fails.
Upvotes: 6
Views: 4259
Reputation: 531165
Just like $@
, you need to quote the array expansion.
func () {
argumentsArray=( "$@" )
cp "${argumentsArray[@]}"
}
However, the array serves no purpose here; you can use $@
directly:
func () {
cp "$@"
}
Upvotes: 5