Estoy tratando de imprimir -n
usando el echo
comando. Pero si simplemente escribo echo -n
, solo emite una nueva línea, no aparece -n
, sino que emite una nueva línea.
getopt
(???) para analizar la línea de comando
Estoy tratando de imprimir -n
usando el echo
comando. Pero si simplemente escribo echo -n
, solo emite una nueva línea, no aparece -n
, sino que emite una nueva línea.
getopt
(???) para analizar la línea de comando
Respuestas:
El problema es que echo
interpreta el -n
como 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 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.
$ 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 rev
comando simplemente imprime su salida invertida.
Use la herramienta adecuada para el trabajo
$ printf -- '-n\n'
-n
grep '^-n'
. pritnf
es el camino a seguir, de verdad.
printf
todos modos es mejor, pero la pregunta es sobre solo echo
.
echo -e "-n\c"
hace exactamente lo mismo.
\c
es suprimir más salida
A veces es una buena idea usar la herramienta adecuada. Podrías usar printf
en su lugar:
% printf "-n\n"
-n
echo
, mientras que printf
está mejor estandarizada .
Puede usar este comando, pero agrega un espacio extra.
echo -e "\r-n"
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 para echo
.
PD La mejor solución en mi humilde opinión es
echo -e "-n\c"
No agrega caracteres adicionales .
echo -e "-n\n"
imprime lo mismo pero con una nueva línea de caracteres.
-n
es válido, -nfoo
no es así que se imprimirá.
man echo
también lo tiene. Pero help
es un poco mejor.
/bin/echo
es una cosa completamente diferente y cuando ejecutas echo
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:
echo "-n "
Esto funciona porque while -n
es una opción válida para echo
, -n
con un espacio después de que no lo es. Como no es una opción, echo
solo la imprime.
Ustedes realmente lo están pensando demasiado.
echo -e \\055n
O sin nueva línea final
echo -en \\055n
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 usar printf
en su lugar donde esté disponible. Esta página de referencia proporciona más detalles y explica muy bien cuándo, cómo echo
y cómo printf
debe 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.
En el script Bash puedes ejecutar:
echo -n -
echo n
O en shell interactivo:
echo -n - ; echo n
Este echo
es un -
personaje y un n
personaje.
-pilot6@Pilot6:~$
. Las segundas salidas n
.
&&
- Realmente no lo digo esta respuesta es incorrecta .
Tu puedes correr
printf -n;echo
Probado en Busybox Ash
ash
es el nombre de la Shell Almquist.
echo -n -- -n
Funciona (no tengo ninguna caja de Linux a mano para probar)?