Caracteres válidos aqui tag doc

1

Quais caracteres são válidos em uma tag do doc aqui?

cat << 'what_characters_can_be_used_here'

what_characters_can_be_used_here

Eu pergunto, porque eu quero uma string que é muito improvável. Assim, quero incluir caracteres estranhos na string. Eu uso o bash e posso usar recursos específicos do bash, mas é interessante conhecer também as limitações gerais do POSIX. Também é interessante conhecer o comprimento máximo seguro para a cadeia delimitadora.

    
por user877329 19.11.2016 / 19:12

2 respostas

0

De acordo com a especificação POSIX , o seção em heredocs define a" tag "heredoc simplesmente como uma palavra . Isso me leva a acreditar que qualquer coisa que o shell define como uma palavra válida é aceitável.

Quanto a um tamanho máximo de palavras, eu aposto que depende do shell em que você estaria executando o script, embora eu duvido muito que você atingiria um limite rígido no comprimento sem usar uma string absurdamente longa.

    
por 20.11.2016 / 00:31
0

Você pode usar qualquer sequência não vazia de caracteres que não seja uma nova linha como o delimitador. POSIX não indica qualquer limitação. Você pode especificar uma nova linha no delimitador, mas ela nunca será encontrada. Muitos shells suportam delimitadores vazios, mas o ATT ksh não. Na verdade, a maioria das shells aceita seqüências arbitrárias de bytes diferentes de nulo e de nova linha, mas eu não recomendaria o uso de seqüências de bytes inválidos. Também recomendo não usar caracteres de retorno de carro, pois eles podem ser reencodidos quando o script for editado ou transferido para outra máquina. O espaço em branco à direita também é propenso a ser removido acidentalmente durante a edição. Aderindo ao ASCII imprimível é mais seguro.

É claro que, se o delimitador incluir um caractere que tenha um significado especial na sintaxe do shell, você precisará citá-lo depois do operador << e só poderá usar aqui um documento literal, não um aqui -documento com variável e substituição de comandos.

    
por 20.11.2016 / 00:57