Os exemplos a seguir mostram que uma nova linha é adicionada a uma string aqui .
Por que isso é feito?
xxd -p <<<'a'
# output: 610a
xxd -p <<<'a
'
# output: 610a0a
fonte
Os exemplos a seguir mostram que uma nova linha é adicionada a uma string aqui .
Por que isso é feito?
xxd -p <<<'a'
# output: 610a
xxd -p <<<'a
'
# output: 610a0a
A resposta fácil é porque o ksh é escrito dessa maneira (e o bash é compatível). Mas há uma razão para essa escolha de design.
A maioria dos comandos espera entrada de texto. No mundo unix, um arquivo de texto consiste em uma sequência de linhas, cada uma terminando em uma nova linha . Portanto, na maioria dos casos, é necessária uma nova linha final. Um caso especialmente comum é pegar a saída de um comando com uma suspeita de comando, processá-lo de alguma maneira e depois passá-lo para outro comando. A substituição de comando retira novas linhas finais; <<<
coloca um de volta.
tmp=$(foo)
tmp=${tmp//hello/world}
tmp=${tmp#prefix}
bar <<<$tmp
Bash e ksh não podem manipular dados binários de qualquer maneira (ele não pode lidar com caracteres nulos), portanto, não é de surpreender que suas instalações sejam voltadas para dados de texto.
A <<<
sintaxe da string here é principalmente apenas por conveniência, como <<
documentos here. Se você não precisar adicionar uma nova linha final, use echo -n
(no bash) ou printf
e um pipeline.
<<<
foi introduzido no mundo Bourne porzsh
, nãoksh
. E foi inspirado por um operador semelhante na porta Unix,rc
que não adicionou esse caractere de nova linha extra. Curiosamente, o=(<<<text)
operador não adiciona essa nova linhazsh
.printf
, etc), evitando a nova linha de caudabash
? Como @ StéphaneChazelas apontado é possível emzsh
.Um cenário no qual é prático ter novas linhas anexadas às seqüências de caracteres here é quando se usa o
read
comando quando oset -e
modo está ativo. Lembre-se de queset -e
um script é finalizado quando (mais ou menos) encontra instruções que geram um código de status diferente de zero. Considere queread
gera um código de status diferente de zero quando encontra uma sequência sem novas linhas:fonte
Eu acho que é a única maneira de obter uma nova linha no final de uma prova aqui:
Parece que o operador da string aqui retira novas linhas, a menos que sejam fornecidas na sintaxe que você enviou.
fonte
xxd <<<$(echo a)
.