GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo funciona cat << EOF en bash?

El cat <<EOF La sintaxis es muy útil cuando se trabaja con texto de varias líneas en Bash, p. al asignar una cadena de varias líneas a una variable de shell, un archivo o una tubería.

Ejemplos de cat <<EOF uso de sintaxis en Bash:

1. Asigne una cadena de varias líneas a una variable de shell

$ sql=$(cat <<EOF
SELECT foo, bar FROM db
WHERE foo='baz'
EOF
)

El $sql La variable ahora también contiene los caracteres de nueva línea. Puedes verificar con echo -e "$sql" .

2. Pase una cadena de varias líneas a un archivo en Bash

$ cat <<EOF > print.sh
#!/bin/bash
echo \$PWD
echo $PWD
EOF

El print.sh el archivo ahora contiene:

#!/bin/bash
echo $PWD
echo /home/user

3. Pase una cadena multilínea a una tubería en Bash

$ cat <<EOF | grep 'b' | tee b.txt
foo
bar
baz
EOF

El b.txt el archivo contiene bar y baz líneas. La misma salida se imprime en stdout .


Esto se llama heredoc formato para proporcionar una cadena en stdin. Consulte https://en.wikipedia.org/wiki/Here_document#Unix_shells para obtener más detalles.

Desde man bash :

Aquí Documentos

Este tipo de redirección indica al shell que lea la entrada de la fuente actual hasta que se vea una línea que contenga solo una palabra (sin espacios en blanco al final).

Todas las líneas leídas hasta ese punto se utilizan como entrada estándar para un comando.

El formato de los documentos aquí es:

          <<[-]word
                  here-document
          delimiter

No se realiza ninguna expansión de parámetros, sustitución de comandos, expansión aritmética o expansión de nombre de ruta en palabra . Si algún carácter en palabra arequoted, el delimitador es el resultado de la eliminación de comillas en palabra y las líneas en el aquí-documento no se expanden. Si palabra no está entre comillas, todas las líneas del aquí-documento están sujetos a expansión de parámetros, sustitución de comandos y expansión aritmética. En este último caso, la secuencia de caracteres \<newline> se ignora y \ debe usarse para citar los caracteres \ , $ y ` .

Si el operador de redirección es <<- , todos los caracteres de tabulación iniciales se eliminan de las líneas de entrada y la línea que contiene delimitador . Esto permite que los documentos aquí dentro de los scripts de shell tengan una sangría natural.


En su caso, "EOF" se conoce como "Etiqueta aquí". Básicamente <<Here le dice al shell que va a ingresar una cadena de varias líneas hasta la "etiqueta" Here . Puede nombrar esta etiqueta como desee, a menudo es EOF o STOP .

Algunas reglas sobre las etiquetas Aquí:

  1. La etiqueta puede ser cualquier cadena, en mayúsculas o minúsculas, aunque la mayoría de la gente usa mayúsculas por convención.
  2. La etiqueta no se considerará como una etiqueta Aquí si hay otras palabras en esa línea. En este caso, simplemente se considerará parte de la cadena. La etiqueta debe estar sola en una línea separada, para que se considere una etiqueta.
  3. La etiqueta no debe tener espacios iniciales ni finales en esa línea para que se considere una etiqueta. De lo contrario, se considerará como parte de la cadena.

ejemplo:

$ cat >> test <<HERE
> Hello world HERE <-- Not by itself on a separate line -> not considered end of string
> This is a test
>  HERE <-- Leading space, so not considered end of string
> and a new line
> HERE <-- Now we have the end of the string

Linux
  1. ¿Cómo funciona Awk '!a[$0]++'?

  2. ¿Cómo funciona la punta adhesiva?

  3. ¿El propósito de .bashrc y cómo funciona?

  4. Ssh:¿cómo funciona TCP-keepalive en Ssh?

  5. Cómo dividir una cadena en Bash Script

¿Qué es NGINX? ¿Como funciona?

Cómo verificar si una cadena contiene una subcadena en Bash

¿Cómo funciona el intercambio de memoria en Linux?

¿Cómo puedo verificar los caracteres textuales de una cadena de comando bash?

¿Cómo funciona el comando ps?

¿Cómo funciona la pantalla de Linux?