Estou tentando imprimir -n
usando o echo
comando Mas se eu simplesmente digitar echo -n
, ele somente emitirá uma nova linha, não aparecerá -n
, em vez disso, emitirá uma nova linha.
getopt
(???) para analisar a linha de comando
Estou tentando imprimir -n
usando o echo
comando Mas se eu simplesmente digitar echo -n
, ele somente emitirá uma nova linha, não aparecerá -n
, em vez disso, emitirá uma nova linha.
getopt
(???) para analisar a linha de comando
Respostas:
O problema é que echo
interpreta o -n
como um argumento. Na implementação padrão do bash, isso significa (de help echo
):
-n do not append a newline
Existem várias maneiras de contornar isso:
Transforme-o em algo que não é uma opção, incluindo outro personagem. Por exemplo, diga echo
para não imprimir uma nova linha com -n
, em seguida, peça para interpretar escapes de barra invertida -e
e adicione a nova linha explicitamente.
$ echo -ne '-n\n'
-n
Como alternativa, basta incluir um espaço
$ echo " -n"
-n
Isso, no entanto, adiciona um espaço que você provavelmente não quer.
Use um caractere não imprimível antes dele. Aqui. Estou usando o backspace ( \b
)
$ echo -e "\b-n"
-n
Isso também adiciona um caractere extra que você provavelmente não deseja.
Use truques
$ echo n- | rev
-n
O rev
comando simplesmente imprime sua saída invertida.
Use a ferramenta certa para o trabalho
$ printf -- '-n\n'
-n
grep '^-n'
. pritnf
é o caminho a seguir, realmente.
printf
é melhor de qualquer maneira, mas a questão é apenas justa echo
.
echo -e "-n\c"
faz a coisa exata.
\c
é suprimir mais saída
Às vezes, é uma boa ideia usar a ferramenta certa. Você pode usar printf
:
% printf "-n\n"
-n
echo
, enquanto printf
é melhor padronizada .
Você pode usar este comando, mas ele adiciona um espaço extra.
echo -e "\r-n"
Este é um tipo de truque.
-e
ativa símbolos de comando de barra invertida.
\r
é um retorno de carro.
Na verdade, qualquer \
caractere válido funciona em qualquer lugar da string.
Você pode ver quais são válidos por help echo
.
echo "-n"
não funciona porque -n
é usado como parâmetro para echo
.
PS A melhor solução IMHO é
echo -e "-n\c"
Não adiciona caracteres extras .
echo -e "-n\n"
imprime da mesma forma, mas com um novo caractere de linha.
-n
é válido, -nfoo
não é para que seja impresso.
man echo
também. Mas help
é um pouco melhor.
/bin/echo
é uma coisa completamente diferente e, quando você executa o echo
bash, obtém o built-in que pode ser bem diferente dependendo do seu shell.
Eu acho que se você definitivamente quiser usar echo
apenas isso deve satisfazê-lo:
echo "-n "
Isso funciona porque while -n
é uma opção válida para echo
, -n
com um espaço depois que não é. Como não é uma opção, echo
apenas imprima.
Vocês estão realmente pensando demais.
echo -e \\055n
Ou sem nova linha à direita
echo -en \\055n
printf "-n\n"
pensar demais?
/bin/echo
pelo menos se invocado comoecho -e "\055n"
Para estender a resposta da @ AB, a única maneira portátil de usar echo
é abster-se de usar opções como -n
. Considere o uso, printf
se disponível. Esta página de referência fornece mais detalhes e explica muito bem quando e como echo
e printf
deve ser usado:
Atualmente, o echo (1) só é portátil se você omitir sinalizadores e escapar sequências. Use printf (1) em vez disso, se precisar de mais do que texto simples.
No script Bash, você pode executar:
echo -n -
echo n
Ou no shell interativo:
echo -n - ; echo n
Isso echo
é um -
personagem e um n
personagem.
-pilot6@Pilot6:~$
. As segundas saídas n
.
&&
- eu não diria que esta resposta está errada .
Você pode correr
printf -n;echo
Testado em Busybox Ash
ash
é o nome do Almquist Shell.
echo -n -- -n
(não tem nenhuma caixa linux à mão para testar)?