Noto que la respuesta correcta ya ha sido dada, pero estoy tratando de resumirla en una respuesta más sucinta.
1. No hay nada que impida que tenga caracteres de tabulación literal en un documento aquí.
Para escribir una pestaña literal en el indicador Bash, debe escaparse. El carácter de escape es ctrl-V (a menos que tenga enlaces personalizados para anular esto).
$ echo -n 't<ctrl-v><tab>ab' | hexdump -C
00000000 74 09 61 62 |t.ab|
00000004
En la mayoría de editor de cualquier programador, debería ser trivial para insertar una tabulación carácter literal (aunque algunos editores podrían querer escapar, también. En Emacs, Ctrl-Q TAB inserta una pestaña literal).
Para legibilidad, podría ser mejor usar algún tipo de escape en lugar de un carácter de tabulación literal. En Bash, la sintaxis de cadena $ '...' es conveniente para esto.
2. Para evitar la expansión variable, cite todos los signos de dólar, o ponga aquí el terminador de documento entre comillas.
$ hexdump -C <<HERE
> t<ctrl-v><tab>\$ab
HERE
00000000 74 09 24 61 62 0a |t.$ab.|
00000006
$ hexdump -C <<'HERE'
> t<ctrl-v><tab>$ab
HERE
00000000 74 09 24 61 62 0a |t.$ab.|
00000006
En este contexto, no importa si utiliza comillas simples o dobles.
3. No estoy seguro de entender esta subestación. El propósito de un documento aquí es insertarlo en un script. El ejemplo anterior ilustra cómo pasar un documento aquí a hexdump en un script, o en la línea de comando.
Si desea utilizar el mismo documento aquí varias veces, no hay una manera directa de hacerlo directamente. La secuencia de comandos podría escribir un documento aquí en un archivo temporal, luego pasar ese archivo temporal a varios comandos y luego borrar el archivo temporal. (Tenga cuidado de utilizar trap
para eliminar el archivo temporal también en caso de que se interrumpa la secuencia de comandos.)
También puede poner el contenido del documento aquí en una variable e interpolarlo.
# Note embedded newlines inside the single quotes,
# and the use of $'...\t...' to encode tabs
data=$'coffee\t$1.50
tea\t$1.50
burger\t$5.00'
# Run Word Count on the data using a here document
wc <<HERE
$data
HERE
# Count number of tab characters using another here document with the same data
grep -c $'\t' <<HERE
$data
HERE
Usted podría utilizar equivalentemente echo -E "$data" | wc; echo -E "$data" | grep -c $'\t'
pero utilizando eco no es muy elegante y puede ser que sea menos portátiles (aunque si su objetivo es bash, todos los ecos deben ser los mismos. Si su objetivo es la cáscara de Bourne, en general, es posible que también gasta un proceso externo para cada eco).
este sitio también es interesante: http: //tldp.org/LDP/abs/h tml/abs-guide.html # GENERATESCRIPT –