Bonjour,
J’ai une chaine qui est:
echo $line; echo $line | hexdump -v
-w /etc/group -p wa -k identity
0000000 772d 2f20 7465 2f63 7267 756f 2070 702d
0000010 7720 2061 6b2d 6920 6564 746e 7469 0a79
0000020
et une autre chaine qui est:
echo ${output[$count]}; echo ${output[$count]} | hexdump -v
-w /etc/group -p wa -k identity
0000000 772d 2f20 7465 2f63 7267 756f 2070 702d
0000010 7720 2061 6b2d 6920 6564 746e 7469 0a79
0000020
Elles sont donc rigoureusement identiques.
Mais quand je les compare:
[ "$line" = "${output[$count]}" ] && echo "ok" || echo "nok"
nok
Si je fait le même test avec le texte au lieu des variables c’est bon.
Quelqu’un saurait-il me dire pourquoi?
C’est lié aux variables dans la suite de commandes mais je ne sais pas pourquoi:
res=true
check="$TMPCISDISK/CIS-6_2_3_8_check.disk"
output=("-w /etc/group -p wa -k identity " \
"-w /etc/passwd -p wa -k identity" \
"-w /etc/gshadow -p wa -k identity" \
"-w /etc/shadow -p wa -k identity" \
"-w /etc/security/opasswd -p wa -k identity" \
"-w /etc/nsswitch.conf -p wa -k identity" \
"-w /etc/pam.conf -p wa -k identity" \
"-w /etc/pam.d -p wa -k identity")
count=0
if [ -s $check ]; then
while IFS= read -r line
do
[ "$line" != "${output[$count]}" ] && { res=false; break; }
count=$((count+1))
done < $check
else
res=false
fi
echo $res