Estou com um problema echo
no meu script:
echo -n "Some string..."
impressões
-n Some string...
e passa para a próxima linha. No console, ele está funcionando corretamente, sem nova linha:
Some string...
shell
command-line
sh
qwertz
fonte
fonte
bash
no modo bourne shell, ele funciona bem aqui. Além disso, é um pouco improvável que você esteja realmente usando um shell bourne como seu shell interativo, não?echo -ne "text without new line: "; echo "some text";
Respostas:
Existem várias versões do
echo
comando, com comportamentos diferentes. Aparentemente, o shell usado para o seu script usa uma versão que não reconhece-n
.O
printf
comando tem um comportamento muito mais consistente.echo
é bom para coisas simples comoecho hello
, mas sugiro usarprintf
para algo mais complicado.Em que sistema você está e qual shell seu script usa?
fonte
#!/bin/bash
, funcionou. Normalmente estou trabalhando com o bash.printf
comando.echo
sempre adiciona novas linhas ... A solução alternativa é na melhor das hipóteses.%
é o seu prompt de shell. Tente isso e observe com cuidado:printf hello; sleep 5
bash
possui um comando "interno" chamado "eco":Além disso, existe um comando "echo" que é um executável adequado (ou seja, o shell bifurca e executa
/bin/echo
, em vez de interpretáecho
-lo e executá-lo):O comportamento de qualquer um
echo
WRT de um para\c
e-n
varia. Sua melhor aposta é usarprintf
, que está disponível em quatro diferentes sabores * NIX que eu observei:fonte
Tente com
Funciona para mim como esperado (como entendi da sua pergunta).
Observe que eu recebi essas informações da
man
página. Aman
página também observa que o shell pode ter sua própria versãoecho
e não tenho certeza sebash
tem sua própria versão.fonte
echo "some string...\c"
. Se, no entanto, você precisar oferecer suporte a várias variantes do bash com comandos echo muito diferentes, provavelmente é melhor usar printf ou precisar verificar os recursos dos comandos echo com algo como[ -n "$( echo -e )" ] && echo "sh stuff\c" || echo -e "bash stuff\c"
(pelo menos o bash suporta \ c também, portanto, não é necessário usar o -n opção, mas você precisa de -e para bash)Para conseguir isso, existem basicamente dois métodos que eu frequentemente uso:
1. Usando o caractere de escape do cursor (
\c
) comecho -e
Exemplo :
-e
O sinalizador ativa os caracteres E scape na string.\c
traz o C usor de volta à linha atual.OU
2. Usando o
printf
comandoExemplo :
fonte
Se você usar eco dentro de um if com outros comandos, como "ler", ele poderá ignorar a configuração e, de qualquer forma, irá pular para uma nova linha.
fonte
Apenas para o Linux mais popular
Ubuntu
e ébash
:Verifique qual shell você está usando? Principalmente abaixo funciona, mas veja isso :
echo $0
Se as impressões acima forem impressas
bash
, abaixo funcionará:printf "hello with no new line printed at end"
OU
echo -n "hello with no new line printed at end"
fonte
Eu acredito que agora a sua impressão de saída como abaixo
Você pode usar
xargs
para obter o stdout de várias linhas na mesma linha.fonte
Quando você escreve seu shell script, sempre coloque a primeira linha como #! / Usr / bin / env bash. Esse shell não omite ou manipula seqüências de escape. ex echo "Esta é a primeira \ n linha" imprime Esta é a primeira \ n linha.
fonte
fonte