Eu acho que você está "preso" precisando usar eval
aqui, então arg_part1 é reinterpretado como uma string de comando, que é então analisada em um comando e argumentos:
#! /bin/sh
arg_part1="./test1.sh '123 789'"
arg_part2=456
eval "${arg_part1}" "${arg_part2}"
Saída:
Hello World 123 789 456
Saída de depuração:
$ sh -x test2.sh
+ arg_part1='./test1.sh '\''123 789'\'''
+ arg_part2=456
+ eval './test1.sh '\''123 789'\''' 456
++ ./test1.sh '123 789' 456
Hello World 123 789 456
Observe que, como você citou aspas internas em '123 789'
, elas aparecem como um único argumento $1
para test1.sh.