¿Cómo hago eco de uno o más caracteres de tabulación usando un script bash? Cuando ejecuto este código
res=' 'x # res = "\t\tx"
echo '['$res']' # expect [\t\tx]
entiendo esto
res=[ x] # that is [<space>x]
echo -e ' \t '
repetirá 'espacio de tabulación espacio nueva línea' ( -e
significa 'permitir la interpretación de escapes de barra invertida'):
$ echo -e ' \t ' | hexdump -C
00000000 20 09 20 0a | . .|
echo -e
no funciona desde Makefiles?echo -e
que no es POSIX y lasmake
llamadas/bin/sh
que normalmente no se usan en el programa se usan de forma interactiva y normalmente no se han-e
implementado. Para portabilidad, useprintf '\t'
en su lugar.man
página delecho
comando no menciona la opción-e
. Sin embargo, esta opción es aceptada.Uso
printf
, noecho
.Hay varias versiones diferentes del
echo
comando. Existe/bin/echo
(que puede ser o no la versión GNU Coreutils, dependiendo del sistema), y elecho
comando está integrado en la mayoría de los shells. Las diferentes versiones tienen diferentes formas (o ninguna) para especificar o deshabilitar escapes para los caracteres de control.printf
, por otro lado, tiene mucha menos variación. Puede existir como un comando, por lo general/bin/printf
, y está integrado en algunos shells (bash y zsh lo tienen, tcsh y ksh no), pero las diversas versiones son mucho más similares entre sí que las diferentes versiones deecho
. Y no tiene que recordar las opciones de línea de comandos (con algunas excepciones; GNU Coreutils printf acepta--version
y--help
, y el bash printf incorporado acepta-v var
almacenar la salida en una variable).Por su ejemplo:
Y ahora es tiempo de admitir que
echo
funcionará igual de bien para el ejemplo que está preguntando; solo necesita poner comillas dobles alrededor del argumento:como escribió kmkaplan (hace dos años y medio, ¡acabo de darme cuenta!). El problema con tus comandos originales:
no está con
echo
; es que el caparazón reemplazó la pestaña con un espacio antes deecho
verlo.echo
está bien para una salida simple, comoecho hello world
, pero debe usarloprintf
cuando quiera hacer algo más complejo. Usted puede obtenerecho
a trabajar, pero el código resultante es probable que falle cuando se ejecuta con una diferenteecho
aplicación o un shell diferente.fuente
Pon tu cadena entre comillas dobles :
fuente
También puedes probar:
fuente
necesitas usar -e flag para echo, entonces puedes
fuente
Desde la página de manual de bash:
Entonces puedes hacer esto:
fuente
Usar la palabra por palabra de pulsaciones de teclas,
^V
(CTRL+V
,C-v
, lo que sea ).Cuando escribe
^V
en el terminal (o en la mayoría de los editores de Unix), el siguiente carácter se toma literalmente . Puede usar esto para escribir un carácter de tabulación literal dentro de una cadena que está repitiendo.Algo así como los siguientes trabajos:
Documentos bash ( qv , "inserción-citada")
nota al margen: de acuerdo con esto,
ALT+TAB
debería hacer lo mismo, pero todos hemos vinculado esa secuencia al cambio de ventana, por lo que no podemos usarla-
Nota: puedes usar esta estrategia con todo tipo de personajes inusuales. Como un retorno de carro:
Esto se debe a que el retorno de carro es ASCII 13 y M es la decimotercera letra del alfabeto, por lo que cuando escribe
^M
, obtiene el decimotercer carácter ASCII. Puede verlo en acción usandols^M
, en una solicitud vacía, que insertará un retorno de carro, haciendo que la solicitud actúe como si presionara retorno. Cuando estos caracteres se interpretan normalmente, textualmente se obtiene el carácter literal.fuente
grep
para atrapar líneas que conteníantab
caracteres.Usar echo para imprimir valores de variables es una trampa común de Bash. Link de referencia:
http://mywiki.wooledge.org/BashPitfalls#echo_.24foo
fuente
Si desea usar
echo "a\tb"
en un script, ejecute el script como:Alternativamente, puede otorgarle a myscript.sh el permiso de ejecución y luego ejecutar el script.
fuente
fuente