Você deve usar "$@" em vez de $* :
exec ./mysh1 "$@"
Esse é o caminho certo para expandir todos os argumentos posicionais como palavras separadas.
Quando você usa $* , todos os argumentos posicionais foram concatenados em uma cadeia longa, com o primeiro valor de IFS como separador, que é o padrão para um espaço em branco, você obteve A B 2 C .
Agora, porque você usa $* sem as aspas duplas (o que pode levar a implicações de segurança e faça seu script engasgar ), o shell executará split+glob nele. A longa string que você obteve acima foi dividida em quatro palavras, A , B , 2 e C .
Portanto, você passou quatro argumentos para mysh1 em vez de três.