Que signifie <<<? Voici un exemple:
$ sed 's/a/b/g' <<< "aaa"
bbb
Est-ce quelque chose de général qui fonctionne avec plus de commandes Linux?
Il semble qu'il alimente le programme sed
avec la chaîne aaa
, mais n'est-ce pas << ou <habituellement utilisé pour cela?
D'autres ont répondu à la question fondamentale: qu'est-ce que c'est? Voyons pourquoi c'est utile.
Vous pouvez également alimenter une chaîne en stdin d'une commande comme ceci:
echo "$string" | command
Cependant, en bash, l'introduction d'un canal signifie que les commandes individuelles sont exécutées en sous-coquilles. Considère ceci:
echo "hello world" | read first second
echo $second $first
La sortie de la 2e commande echo imprime un seul espace. Whaaaa? Qu'est-il arrivé à mes variables? Étant donné que la commande de lecture est dans un pipeline, elle est exécutée dans un sous-shell. Il lit correctement 2 mots de son stdin et attribue aux variables. Mais alors la commande se termine, le sous-shell se termine et les variables sont perdues.
Parfois, vous pouvez contourner cela avec des accolades:
echo "hello world" | {
read first second
echo $second $first
}
C'est OK si votre besoin de valeurs est contenu, mais vous n'avez toujours pas ces variables dans le shell actuel de votre script. Pour remédier à cette situation confuse, utilisez une chaîne ici
read first second <<< "hello world"
echo $second $first
Ah, beaucoup mieux!
<<<
désigne une chaîne ici.
$ cat <<< 'hi there'
hi there
Il passe le mot à droite à l'entrée standard de la commande à gauche.
<<
désigne un document ici.
$ cat <<EOF
> hi
> there
> EOF
hi
there
EOF
peut être n'importe quel mot.
Ici, les documents sont couramment utilisés dans les scripts Shell pour créer des fichiers entiers ou pour afficher de longs messages.
cat > some-file <<FILE
foo
bar
bar bar
foo foo
FILE
<
transmet le contenu d'un fichier à l'entrée standard d'une commande.
$ 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
...
Jetez un œil à la page de manuel de Bash . Cette notation fait partie de ce qu'on appelle un ici documente & ici des chaînes . Il vous permet de générer une entrée de données multi-lignes en une seule chaîne continue. La variation que vous demandez est appelée ici chaîne .
extrait de la page de manuel 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.
Cela signifie ici des chaînes.
<<< strings
Les chaînes sont développées et fournies à la commande sur son entrée standard.
Dans votre exemple, les chaînes aaa
sont transmises à la commande sed via stdin.