Não realmente.
Uma solução é reservar um personagem como separador de campo. Obviamente, não será possível incluir esse caractere, seja lá o que for, em uma opção. Tab e newline são candidatos óbvios, se o idioma de origem facilitar a sua inserção. Eu evitaria caracteres multibyte se você quiser portabilidade (por exemplo, dash e BusyBox não suportam caracteres multibyte).
Se você confiar na divisão do IFS, não se esqueça de desativar a expansão de curinga com set -f
.
tab=$(printf '\t')
IFS=$tab
set -f
exec java $JVM_EXTRA_OPTS …
Outra abordagem é introduzir uma sintaxe de cotação. Uma sintaxe de citação muito comum é que uma barra invertida protege o próximo caractere. A desvantagem de usar barras invertidas é que muitas ferramentas diferentes o usam como caracteres de aspas, o que pode ser difícil de descobrir quantas barras invertidas você precisa.
set java
eval 'set -- "$@"' $(printf '%s\n' "$JVM_EXTRA_OPTS" | sed -e 's/[^ ]/\&/g' -e 's/\\/\/g') …
exec "$@"