Estou tentando imprimir -nusando o echocomando 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 -nusando o echocomando 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 echointerpreta o -ncomo 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 echopara não imprimir uma nova linha com -n, em seguida, peça para interpretar escapes de barra invertida -ee adicione a nova linha explicitamente.
$ echo -ne '-n\n'
-nComo 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 revcomando simplesmente imprime sua saída invertida.
Use a ferramenta certa para o trabalho
$ printf -- '-n\n'
-ngrep '^-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, -nfoonão é para que seja impresso.
man echotambém. Mas helpé um pouco melhor.
/bin/echoé uma coisa completamente diferente e, quando você executa o echobash, obtém o built-in que pode ser bem diferente dependendo do seu shell.
Eu acho que se você definitivamente quiser usar echoapenas isso deve satisfazê-lo:
echo "-n "
Isso funciona porque while -né uma opção válida para echo, -ncom um espaço depois que não é. Como não é uma opção, echoapenas 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/echopelo 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, printfse disponível. Esta página de referência fornece mais detalhes e explica muito bem quando e como echoe printfdeve 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 npersonagem.
-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)?