A 'here string' ( <<<
) é uma construção útil e pode ser usada em vez de echo
em muitas situações. No entanto, ao calcular um hash (como um exemplo), a adição de um caractere de nova linha altera o valor do hash.
Procurei um método compacto para evitar que a quebra de linha fosse adicionada pela 'here string', mas não consegui encontrar nada. Esta pergunta foi feita e respondida no SO , mas estranhamente a resposta aceita (ou qualquer uma das respostas) não responde realmente à pergunta AFAICT.
Alguns podem considerar responder a essa pergunta com uma sugestão de simplesmente usar echo -n <string> | md5sum
or printf ... | md5sum
em vez disso. Mas minha pergunta diz respeito especificamente à 'string here'.
A documentação diz especificamente que
<<<
acrescenta uma nova linha. Não diz que há uma maneira de evitar isso, então não há nenhuma.Então, ao usar essa sintaxe e então pedir que ela funcione de forma diferente, você está pedindo um comportamento que é contrário à documentação que você citou e que não existe. Realmente, essa é uma pergunta irracional.
Existem duas soluções possíveis para isso:
<<<
Não há outra solução no bash.
Para registro,
<<<
foi adicionado primeiro ao clone de domínio público de Byron Rakitzisrc
para Unix ezsh
¹. Foi gradualmente adicionado a vários outros shells desde então.Uma diferença é que em
zsh
's<<<
, uma nova linha é adicionada, enquanto emrc
's não.Outros shells do tipo Bourne que foram adicionados,
<<<
como ksh93 (desdem+
, 2002), bash (desde 2.05b, 2002), mksh (desde R33, 2008) ou yash (desde 2.7, 2009) copiaram o método zsh, enquantorc
shells do tipo - comoes
ouakanga
copiaram orc
.Então, se mudar para
rc
ou derivado for uma opção, você pode realmente fazer:Se o objetivo é economizar digitação, você sempre pode definir uma função.
¹ Não está claro quem teve a ideia primeiro, tanto
rc
a versão 1.0 (1991-05-20) quantozsh
a 2.0 (1991-04-24) a tinham, e versões anteriores de cada uma que consegui encontrar não tinham; em todo caso, os arquivos da Usenet da época mostram que os autores de ambos os shells estavam conversando entre si.conforme user10489 acima, você não pode fazer isso somente com strings here.
tentar: