Você não está anexando "várias variáveis". Você está anexando uma string. A interface mais direta para a sua função seria chamá-la com uma única string como argumento:
myfunction 'test1 test2'
e depois (não usando function
como o nome da função porque é uma palavra-chave em alguns shells)
myfunction () {
sudo sed -i "/^STRING/ s/\$/ $1/" FILE
}
Tenha em atenção que isto não acrescenta realmente a cadeia especificada, porque o argumento é interpolado no script sed. Qualquer /
ou \
no argumento não é interpretado literalmente. Você pode contornar isso primeiro preparando o argumento:
myfunction () {
extra=$(printf '%s\n' "$1" | sed 's![\/]!\&!g')
sudo sed -i "/^STRING/ s/\$/ $extra/" FILE
}
Como alternativa, você pode usar outra ferramenta, como perl:
myfunction () {
sudo env extra="$1" perl -i -pe '/^STRING/ s/$/\Q$ENV{extra}/' FILE
}
Se você quer absolutamente que sua função tome uma série de strings como argumentos, e anexe-os todos em ordem com um espaço entre eles, então você pode usar "$*"
. Isso se expande para uma única palavra contendo todos os argumentos da função com um espaço intermediário.
myfunction () {
extra=$(printf '%s\n' "$*" | sed 's![\/]!\&!g')
sudo sed -i "/^STRING/ s/\$/ $extra/" FILE
}