¿Cómo pasar los parámetros de la línea de comandos con las cotizaciones almacenadas en una sola variable?

Quiero llamar a una aplicación externa desde el script de shell, pero este script de shell obtiene los parámetros (de otro script) en una sola variable. Todo estuvo bien hasta que no tuve que usar comillas dobles para un solo parámetro, sino palabras separadas por espacios.

Aquí está un ejemplo simplificado de mi problema (sh_param solo imprime todos los parámetros pasados):

<code>#!/bin/sh

pass() {
    echo "Result with \$@"
    ./sh_param $@
    echo "Result with \"\$@\""
    ./sh_param "$@"
    echo "Result with \$*"
    ./sh_param $*
    echo "Result with \"\$*\""
    ./sh_param "$*"
}

pass '"single param" separate params'
</code>

y resultados (sh_param solo imprime todos los parámetros pasados):

<code>Result with $@
Param: "single
Param: param"
Param: separate
Param: params
Result with "$@"
Param: "single param" separate params
Result with $*
Param: "single
Param: param"
Param: separate
Param: params
Result with "$*"
Param: "single param" separate params
</code>

Y yo quiero:

<code>Param: single param
Param: separate
Param: params
</code>

Respuestas a la pregunta(5)

Su respuesta a la pregunta