pourquoi cette expression fonctionne cat > d.txt <<< "$val"
et cat > d.txt <<< $val
ne fonctionne pas? Si je comprends bien, <<<
redirige la valeur de la variable vers stdin. Ai-je raison?
cat >d.txt <<<$val
fonctionnera cat >d.txt <<<$val
tant que $val
ne contient aucun espace. Sinon, l'utilisation de guillemets est nécessaire pour éviter que chaque mot dans $val
ne soit traité comme un argument distinct.
Par exemple, si vous avez
val="ab" cat >d.txt <<<$val
ce que le shell tente de faire est
cat >d.txt <<
Donc, seul le "a" est fourni en entrée et le "b" est juste un autre argument pour cat
.
En utilisant des guillemets
val="ab" cat >d.txt <<<"$val"
maintenant le shell s'exécute
cat >d.txt <<<"ab"
donc la chaîne entière "ab" est traitée comme entrée.