A palavra está dividindo uma parte do POSIX?

3

Eu sei que o Bash tem a divisão de palavras, mas o zsh não, e eu não estou familiarizado com os outros (csh, tcsh, ksh, etc), mas eu queria saber se é parte de qualquer padrão.

Em outras palavras, sh tem divisão de palavras ou é um recurso somente de Bash? Se eu quisesse escrever um script de shell portátil, eu teria que levar em conta a divisão de palavras, ou seria algo fora do padrão que fosse adicionado por outros shells?

    
por 3p1k5auc3 23.01.2018 / 18:54

2 respostas

4

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.

    
por 24.01.2018 / 00:20
2

Field splitting está no padrão POSIX: link

After parameter expansion (Parameter Expansion), command substitution (Command Substitution), and arithmetic expansion (Arithmetic Expansion), the shell shall scan the results of expansions and substitutions that did not occur in double-quotes for field splitting and multiple fields can result.

The shell shall treat each character of the IFS as a delimiter and use the delimiters as field terminators to split the results of parameter expansion, command substitution, and arithmetic expansion into fields.

    
por 23.01.2018 / 19:54