Porque echo
concatena todos os argumentos para imprimi-los, e seu script está limitado ao argumento primeiro . Você deve usar "$@"
e não $1
no seu script.
Vamos analisar os argumentos que você está fornecendo para seus testes:
-
%código%
- um argumento, a cadeia de 3 caracteres A espaço B
-
%código%
- dois argumentos
- primeiro, string vazia concatenada com A
- segundo, B concatenado com string vazia
- dois argumentos
-
%código%
- um argumento, string vazia concatenada com A espaço B concatenado com string vazia
-
%código%
- dois argumentos
- primeiro, string vazia concatenada com string vazia concatenada com A
- segundo, B concatenado com string vazia concatenada com string vazia
- dois argumentos
Nota: você veria resultados diferentes de ./test "A B"
se você tivesse usado mais de um espaço em seus argumentos. Isso porque o eco concatena seus argumentos com um único espaço:
$ echo "A B"
A B
$ echo ""A B""
A B
$ echo """A B"""
A B
$ echo """"A B""""
A B