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
echo
concatena todos sus argumentos para imprimirlos, y su script se limita al primer argumento. Debe usar"$@"
y no$1
en 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
echo
si hubiera usado más de un espacio en sus argumentos. Eso es porque echo concatena sus argumentos con un solo espacio:fuente