¿Qué significa <<<?

¿Qué significa <<<? Aquí hay un ejemplo:

$ sed 's/a/b/g' <<< "aaa" bbb 

¿Es algo general que funciona con más commands de Linux?

Parece que está alimentando el progtwig sed con la cadena aaa , pero ¿no se usa << o <para eso?

Otros han respondido a la pregunta básica: ¿qué es?

Ahora, ¿por qué es útil? También puede alimentar una cadena a un stdin de command de esta manera:

 echo "$string" | command 

Sin embargo, en bash, la introducción de una tubería significa que los commands individuales se ejecutan en subcapas. Considera esto:

 echo "hello world" | read first second echo $second $first 

La salida del segundo command echo un solo espacio. Whaaaa? ¿Qué pasó con mis variables? Como el command de lectura está en una canalización, se ejecuta en una subcadena. Lee correctamente 2 palabras de su stdin y las asigna a las variables. Pero luego el command finaliza, la subshell sale y las variables se pierden.

A veces puedes evitar esto con llaves:

 echo "hello world" | { read first second echo $second $first } 

Eso está bien si su necesidad de los valores está contenida, pero todavía no tiene esas variables en el shell actual de su secuencia de commands. Para remediar esta situación confusa, use una cadena aquí

 read first second <<< "hello world" echo $second $first 

Ah, mucho mejor!

<<< denota una cadena aquí.

 $ cat <<< 'hi there' hi there 

Pasa la palabra de la derecha a la input estándar del command de la izquierda.


<< denota un documento aquí.

 $ cat <<EOF > hi > there > EOF hi there 

EOF puede ser cualquier palabra.

Aquí los documentos se usan comúnmente en scripts de shell para crear files completos o para mostrar posts largos.

 cat > some-file <<FILE foo bar bar bar foo foo FILE 

< pasa el contenido de un file a la input estándar de un command.

 $ cat < /etc/fstab /dev/sda2 /boot ext4 nosuid,noexec,nodev,rw,noatime,nodiratime 0 2 /dev/sda4 / ext4 rw,noatime,nodiratime, 0 1 /dev/sdb5 /var ext4 nosuid,noexec,nodev,rw,relatime 0 2 ... 

Echa un vistazo a la página del hombre de Bash . Esta notación es parte de lo que se llama aquí documentos y aquí cadenas . Le permite generar inputs de datos de varias líneas como una cadena continua. La variación que estás preguntando se llama cadena aquí .

extracto de la página de manual de Bash

 Here Strings A variant of here documents, the format is: <<<word The word is expanded and supplied to the command on its standard input. 

Significa aquí strings.

 <<< strings 

Las cadenas se expanden y se suministran al command en su input estándar.

En su ejemplo, las cadenas aaa se alimentan al command sed a través de stdin.