Considere este script simple llamado prueba :
#!/bin/bash
echo $1
y los siguientes comandos y llamadas:
$ echo "A B"
A B
$ echo ""A B""
A B
$ echo """A B"""
A B
$ echo """A B"""
A B
$ ./test "A B"
A B
$ ./test ""A B""
A
$ ./test """A B"""
A B
$ ./test """"A B""""
A
¿Podría alguien explicar por qué la llamada de prueba no se comporta como el comando echo o apunta a la documentación relevante?
                    
                        shell-script
                                quoting
                                
                    
                    
                        toliveira
fuente
                
                fuente

printf '%q\n' "$@"lugar de usarlaecho, lo que emitirá sus argumentos uno a una con caracteres ocultos y espacios en blanco escapados en forma visible.Respuestas:
Porque
echoconcatena todos sus argumentos para imprimirlos, y su script se limita al primer argumento. Debe usar"$@"y no$1en su script.Veamos los argumentos que está proporcionando para sus pruebas:
./test "A B"./test ""A B""./test """A B"""./test """"A B""""Nota: vería resultados diferentes de
echosi hubiera usado más de un espacio en sus argumentos. Eso es porque echo concatena sus argumentos con un solo espacio:fuente