Por favor, considere este script simples chamado teste :
#!/bin/bash
echo $1
e os seguintes comandos e chamadas:
$ 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
Alguém poderia explicar por que a chamada do teste não se comporta como o comando ecoar ou apontar para a documentação relevante?
shell-script
quoting
toliveira
fonte
fonte
printf '%q\n' "$@"
vez deecho
, o que emitirá seus argumentos individualmente com caracteres ocultos e espaços em branco escapados de forma visível.Respostas:
Porque
echo
concatena todos os argumentos para imprimi-los, e seu script é limitado ao primeiro argumento. Você deve usar"$@"
e não$1
no seu script.Vejamos os argumentos que você está fornecendo para seus testes:
./test "A B"
./test ""A B""
./test """A B"""
./test """"A B""""
Nota: você veria resultados diferentes
echo
se tivesse usado mais de um espaço em seus argumentos. Isso porque o eco concatena seus argumentos com um único espaço:fonte