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.
getopt(???) para analizar la línea de comando
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.
getopt(???) para analizar la línea de comando
Respuestas:
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'
-nAlternativamente, 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.
Use la herramienta adecuada para el trabajo
$ printf -- '-n\n'
-ngrep '^-n'. pritnfes el camino a seguir, de verdad.
printftodos modos es mejor, pero la pregunta es sobre solo echo.
echo -e "-n\c"hace exactamente lo mismo.
\ces suprimir más salida
A veces es una buena idea usar la herramienta adecuada. Podrías usar printfen su lugar:
% printf "-n\n"
-n
echo, mientras que printfestá 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 -nse 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.
-nes válido, -nfoono es así que se imprimirá.
man echotambién lo tiene. Pero helpes un poco mejor.
/bin/echoes una cosa completamente diferente y cuando ejecutas echoen bash, obtienes el incorporado que puede ser bastante diferente dependiendo de tu shell.
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.
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/echoal menos si se invoca comoecho -e "\055n"
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.
En el script Bash puedes ejecutar:
echo -n -
echo n
O en shell interactivo:
echo -n - ; echo n
Este echoes un -personaje y un npersonaje.
-pilot6@Pilot6:~$. Las segundas salidas n.
&&- Realmente no lo digo esta respuesta es incorrecta .
Tu puedes correr
printf -n;echo
Probado en Busybox Ash
ashes el nombre de la Shell Almquist.
echo -n -- -nFunciona (no tengo ninguna caja de Linux a mano para probar)?