@limax : c’est une chaîne de caractères toute simple : “a”.
Merci Taurre pour le coup de la variable $BASH_SUBSHELL qui indique le niveau d’imbrication des sous shells. Et effectivement, avec le pipe on travaille dans un sous shell.
Oui mais je voudrais plutôt faire un traitement ligne par ligne sur le résultat d’une commande.
Au final, j’ai trouvé une méthode qui permet de rediriger la sortie standard d’une commande vers l’entrée standard d’une autre commande, sans passer par le pipe, et donc sans créer un sous shell. C’est avec la syntaxe du here-document du shell.
D’abord on créé un fichier temporaire nommé tmp contenant ceci
abc def
ghi jkl
mno pqr
ttt abc
Ensuite on exécute le script :
[code]#!/bin/sh
while read ligne; do
echo ligne $ligne
done <<delimiter
cat tmp | grep 'abc'
delimiter[/code]
Et voici le résultat :
$ ./script.sh
ligne abc def
ligne ttt abc
Merci de m’avoir aidé.