A divisão implícita de palavras, isto é, a divisão de palavras em uma expansão de variável sem nomenclatura ( $foo
em oposição a "$foo"
), é algo que todas as camadas compatíveis com POSIX fazem e, mais geralmente, todas as conchas sh
. Eles também realizam globbing no resultado. É por isso que você precisa do dobro citações em torno de substituições de variáveis . O mesmo vale para substituições de comandos.
POSIX chama esses divisões de campo e expansão do nome do site .
Zsh se desvia do comportamento sh padrão. Ele não executa a divisão de palavras em substituições de variáveis sem aspas (mas realiza a divisão de palavras em substituições de comandos sem aspas) e não realiza globulações em substituições sem aspas. (Zsh tem esses recursos, é claro, mas eles são explícitos: $=foo
para fazer a divisão de palavras e $~foo
para fazer globbing.) Zsh não é um shell compatível com sh; é bastante próximo, mas não compatível, e a divisão implícita reduzida é um dos principais desvios. O Zsh tem um modo de compatibilidade (que é inserido automaticamente se o executável do zsh é chamado de sh
ou ksh
) no qual ele executa divisão e globalização de palavras implícitas como sh, entre outras coisas.
Bash e ksh são ambos shells compatíveis com sh. O Bash tem algumas incompatibilidades com o POSIX, mas você precisa ir mais fundo para encontrá-las. Em questões importantes, como divisão implícita, é compatível.
(T) csh é uma família completamente diferente de conchas. Sua sintaxe é muito diferente de sh. Também está praticamente morto, então não se preocupe com isso.