Foi-me dito que os espaços são importantes em bash
ou outros scripts de shell e não devo alterar a existência de espaços, a menos que saiba o que estou fazendo. "Mudando a existência", quero dizer inserir um espaço entre dois caracteres não espaciais ou remover um espaço entre dois caracteres não espaciais, por exemplo, mudar var="$val"
para var ="$val"
ou vice-versa. Eu quero perguntar
Existem casos em que o uso de um único espaço ou o uso de vários espaços consecutivos em um script de shell faz a diferença? .
(Obviamente, inserir / excluir um espaço entre aspas faz a diferença, como mudar de echo "a b"
para echo "a b"
ou vice-versa. Estou procurando outros exemplos além deste exemplo trivial.)
Eu me deparei com essa pergunta, mas essa é sobre adicionar e remover espaços entre dois caracteres não espaciais, para os quais conheço muitos exemplos de que isso faria diferença.
Qualquer ajuda seria apreciada. Inclua mais variedades de conchas, se possível.
fonte
echo
comando com esse espaço em branco entre o comando e o argumento.Provavelmente isso é trapaça, mas é o seguinte:
é diferente disso:
mesmo que os espaços não estejam entre aspas. ;-)
Mais confuso, isso:
é diferente disso:
mesmo que pareçam idênticos!
fonte
Se não falar sobre o carácter de espaço (
U+0020
), mas qualquer espaço em branco (U+0020
,\n
,\t
, etc.), então um caso particular vêm à minha mente: aqui, Documentos.Este código (usando espaços):
Irá imprimir:
Mas este código (usando guias):
Irá imprimir:
Isso ocorre porque ( como afirma o POSIX ):
fonte
<<-
operador. Muito obrigado.Isso também tem efeito ao escrever declarações de atribuição. Como se eu dissesse
FOO=xyz
que criaria uma variável de ambiente nomeadaFOO
com valorxyz
, mas se eu separar os iguais com um espaço, pensará que estou invocando um programa nomeadoFOO
com o argumento=xyz
. Por isso, importa quando se trata de certa sintaxe.fonte
FOO=xyz
, cria uma variável interna do shell, mas não uma variável de ambiente. Você precisaset -a
ouexport FOO=xyz
para isso (ou seja, torná-lo parte do ambiente de subprocessos que não são do subshell).