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.