hello bonjour à tous
je ne comprends pas comment faire fonctionner les ( )
les deux fichiers qui doivent être lus
cat f1.txt
x11-x12-x13-x14
y11-y12-y13-y14
z11-z12-z13-z14
cat f2.txt
x21-x22-x23-x24
y21-y22-y23-y24
z21-z22-z23-z24
ce qui marche "bien" , (sauf que IFS est modifié)
for f in f1.txt f2.txt
do
IFS="-"
while read a b c d
do
echo "$a;$b;$c;$d"
done < "$f"
done
# le résultat :
x11;x12;x13;x14
y11;y12;y13;y14
;;;
z11;z12;z13;z14
x21;x22;x23;x24
y21;y22;y23;y24
;;;
z21;z22;z23;z24
je vérifie l'IFS : il a été modifié
echo -e "$IFS" |od -c
0000000 - \n
0000002
( remarque : j'ai une solution : sauvegarder IFS et restituer après )
OLDIFS="$IFS" et après IFS="$OLDIFS"
mais je voulais utiliser les parenthèses
===================================================================================
je voudrais donc éviter la modification de l'IFS , en utilisant les parenthèses
(avant l'essai suivant j'ai restauré l'IFS )
for f in f1.txt f2.txt
do
( IFS="-"
while read a b c d
do
echo "$a;$b;$c;$d"
done < "$f"
)
done
le résultat surprenant dans un terminal
for f in f1.txt f2.txt
> do
> (
> IFS="-"
> while read a b c d
>
Display all 1930 possibilities? (y or n)
! lspcmcia
./ lspgpot
: lsusb
[ ltrace
[[ __ltrim_colon_completions
]] luit
{ lwp-download
} lwp-dump
aa-enabled lwp-mirror
aa-exec lwp-request
aa-remove-unknown lz
aa-status lz4
aa-teardown lz4c
accessdb lz4cat
aconnect lzcat
acpid lzcmp
acpi_listen lzdiff
add-apt-repository lzegrep
addgnupghome lzfgrep
addgroup lzgrep
addpart lzless
add-shell lzma
adduser lzmainfo
agetty lzmore
> e < "$f"
> )
bash: erreur de syntaxe près du symbole inattendu « ) »
done
bash: erreur de syntaxe près du symbole inattendu « done »
remarque : je vérifie l'IFS : il a été modifié
echo -e "$IFS" |od -c
0000000 - \n
0000002
===============================================================================
je restaure l'IFS puis
j'essaie en insérant cette fois le tout entre parenthèses
(
for f in f1.txt f2.txt
do
IFS="-"
while read a b c d
do
echo "$a;$b;$c;$d"
done < "$f"
done
)
même résultat aussi surprenant (pour moi) je n'arrive pas à comprendre
(
> for f in f1.txt f2.txt
> do
> IFS="-"
> while read a b c d
>
Display all 1930 possibilities? (y or n)
! lspcmcia
./ lspgpot
: lsusb
[ ltrace
[[ __ltrim_colon_completions
]] luit
{ lwp-download
} lwp-dump
aa-enabled lwp-mirror
aa-exec lwp-request
aa-remove-unknown lz
aa-status lz4
aa-teardown lz4c
accessdb lz4cat
aconnect lzcat
acpid lzcmp
acpi_listen lzdiff
add-apt-repository lzegrep
addgnupghome lzfgrep
addgroup lzgrep
addpart lzless
add-shell lzma
adduser lzmainfo
agetty lzmore
> e < "$f"
>
> done
bash: erreur de syntaxe près du symbole inattendu « done »
)
bash: erreur de syntaxe près du symbole inattendu « ) »
maigre consolation :
je vérifie l'IFS : cette fois il n'a pas été modifié !!!!!
echo -e "$IFS" |od -c
0000000 \t \n \n
0000004
quelle explication donner à ce résultat
le défi du jour :
comment obtenir le résultat "attendu" comme au début en utilisant les parenthèses
c'est à dire lecture des fichiers f1 et f2 , sans modification de l'IFS