Estoy tratando de imprimir -nusando el echocomando. Pero si simplemente escribo echo -n, solo emite una nueva línea, no aparece -n, sino que emite una nueva línea.
El problema es que echointerpreta el -ncomo un argumento. En la implementación de bash predeterminada, eso significa (desde help echo):
-n do not append a newline
Hay varias formas de evitarlo:
Conviértalo en algo que no sea una opción al incluir otro personaje. Por ejemplo, diga que echono imprima una nueva línea con -n, luego dígale que interprete los escapes de barra invertida con -ey agregue la nueva línea explícitamente.
$ echo -ne '-n\n'-n
Alternativamente, solo incluya un espacio
$ echo " -n"-n
Eso, sin embargo, agrega un espacio que probablemente no quieras.
Use un carácter que no sea de impresión antes. Aquí. Estoy usando la tecla de retroceso ( \b)
$ echo -e "\b-n"-n
Esto también agrega un personaje extra que probablemente no quieras.
Usa trucos
$ echo n-| rev
-n
El revcomando simplemente imprime su salida invertida.
Tienes razón en que cualquier carácter válido `\` lo hará.
Pilot6
@ Pilot6 sí, pero el problema con ese enfoque (el tuyo y el mío) es que agrega un carácter adicional. Eso puede causar problemas en el futuro. Especialmente si quieres analizarlo e intentar algo como grep '^-n'. pritnfes el camino a seguir, de verdad.
terdon
Bueno, de printftodos modos es mejor, pero la pregunta es sobre solo echo.
Pilot6
2
Parece que echo -e "-n\c"hace exactamente lo mismo.
Pilot6
1
\ces suprimir más salida
Pilot6
15
A veces es una buena idea usar la herramienta adecuada. Podrías usar printfen su lugar:
Wov! Esto es mejor que el mío; ¿Puedes explicar un poco para los "principiantes" ;-)
Sadi
Gracias, también noté que no importa dónde agregue el retorno de carro, al principio o al final.
Sadi
@Sadi sí, eso es porque agregar algo lo convierte en una opción no válida. -nes válido, -nfoono es así que se imprimirá.
terdon
@terdon man echotambién lo tiene. Pero helpes un poco mejor.
Pilot6
Sé que lo tiene, simplemente no es relevante. /bin/echoes una cosa completamente diferente y cuando ejecutas echoen bash, obtienes el incorporado que puede ser bastante diferente dependiendo de tu shell.
terdon
5
Creo que si definitivamente quieres usar echosolo, esto debería satisfacerte:
echo "-n "
Esto funciona porque while -nes una opción válida para echo, -ncon un espacio después de que no lo es. Como no es una opción, echosolo la imprime.
Sí, acabo de responder de esta manera. Eliminaré mi respuesta. Esto es relativamente portátil ya que funciona con eco incorporado y /bin/echoal menos si se invoca comoecho -e "\055n"
hasta el
-en no es lo que quiero.
Star OS
2
Para extender la respuesta de @ AB, la única forma portátil de usar echoes abstenerse de usar opciones como -n. Considere usar printfen su lugar donde esté disponible. Esta página de referencia proporciona más detalles y explica muy bien cuándo, cómo echoy cómo printfdebe usarse:
Hoy en día, echo (1) solo es portátil si omite banderas y secuencias de escape. Utilice printf (1) en su lugar, si necesita algo más que texto sin formato.
Primer comando salidas -pilot6@Pilot6:~$. Las segundas salidas n.
Pilot6
@ Pilot6 Depende de si lo está ejecutando en una terminal interactiva o en un script bash, que no se especifica en la pregunta. Otoh si lo necesita en el terminal es fácil de simplemente combinar las dos líneas con &&- Realmente no lo digo esta respuesta es incorrecta .
usuario12205
Lo editaré para que quede mucho más claro que es para un script bash.
echo -n -- -n
Funciona (no tengo ninguna caja de Linux a mano para probar)?getopt
(???) para analizar la línea de comandoRespuestas:
El problema es que
echo
interpreta el-n
como un argumento. En la implementación de bash predeterminada, eso significa (desdehelp echo
):Hay varias formas de evitarlo:
Conviértalo en algo que no sea una opción al incluir otro personaje. Por ejemplo, diga que
echo
no imprima una nueva línea con-n
, luego dígale que interprete los escapes de barra invertida con-e
y agregue la nueva línea explícitamente.Alternativamente, solo incluya un espacio
Eso, sin embargo, agrega un espacio que probablemente no quieras.
Use un carácter que no sea de impresión antes. Aquí. Estoy usando la tecla de retroceso (
\b
)Esto también agrega un personaje extra que probablemente no quieras.
Usa trucos
El
rev
comando simplemente imprime su salida invertida.Use la herramienta adecuada para el trabajo
fuente
grep '^-n'
.pritnf
es el camino a seguir, de verdad.printf
todos modos es mejor, pero la pregunta es sobre soloecho
.echo -e "-n\c"
hace exactamente lo mismo.\c
es suprimir más salidaA veces es una buena idea usar la herramienta adecuada. Podrías usar
printf
en su lugar:fuente
echo
, mientras queprintf
está mejor estandarizada .Puede usar este comando, pero agrega un espacio extra.
Este es un tipo de truco.
-e
habilita los símbolos de comando de barra invertida.\r
Es un retorno de carro.En realidad, cualquier
\
carácter válido funcionará en cualquier lugar de la cadena.Puedes ver cuáles son válidos por
help echo
.echo "-n"
no funciona porque-n
se usa como parámetro paraecho
.PD La mejor solución en mi humilde opinión es
No agrega caracteres adicionales .
imprime lo mismo pero con una nueva línea de caracteres.
fuente
-n
es válido,-nfoo
no es así que se imprimirá.man echo
también lo tiene. Perohelp
es un poco mejor./bin/echo
es una cosa completamente diferente y cuando ejecutasecho
en bash, obtienes el incorporado que puede ser bastante diferente dependiendo de tu shell.Creo que si definitivamente quieres usar
echo
solo, esto debería satisfacerte:Esto funciona porque while
-n
es una opción válida paraecho
,-n
con un espacio después de que no lo es. Como no es una opción,echo
solo la imprime.fuente
Ustedes realmente lo están pensando demasiado.
O sin nueva línea final
fuente
printf "-n\n"
un pensamiento excesivo?/bin/echo
al menos si se invoca comoecho -e "\055n"
Para extender la respuesta de @ AB, la única forma portátil de usar
echo
es abstenerse de usar opciones como-n
. Considere usarprintf
en su lugar donde esté disponible. Esta página de referencia proporciona más detalles y explica muy bien cuándo, cómoecho
y cómoprintf
debe usarse:fuente
En el script Bash puedes ejecutar:
O en shell interactivo:
Este
echo
es un-
personaje y unn
personaje.fuente
-pilot6@Pilot6:~$
. Las segundas salidasn
.&&
- Realmente no lo digo esta respuesta es incorrecta .Otras tres formas:
fuente
Tu puedes correr
Probado en Busybox Ash
fuente
ash
es el nombre de la Shell Almquist.