2013-03-15 5 views
0

ci-dessous est le code que j'ai utilisé pour comparer df ouptut par rapport à une chaîne. Quelqu'un peut-il me dire pourquoi il renvoie toujours faux?La comparaison de chaînes renvoie false pour des chaînes identiques

bash-3.00$ a=$(df -n dir1) 
bash-3.00$ b="/opt    : ufs" 
bash-3.00$ echo "$a" 
/opt    : ufs 
bash-3.00$ echo "$b" 
/opt    : ufs 
bash-3.00$ [[ "$a" = "$b" ]] 
bash-3.00$ echo $? 
1 
bash-3.00$ 
bash-3.00$ [[ "$a" == "$b" ]] 
bash-3.00$ echo $? 
1 

Merci,

+0

Vous pouvez avoir des onglets dans la sortie de df. Vous pouvez vérifier par ex. 'df -n dir1 | grep opt>/tmp/df.out' puis examine attentivement le contenu dans un éditeur. Qu'arrive-t- – JohnJ

+0

si vous procédez comme suit: #/bin/bash a = "/ opt" b = "/ opt" [ "a $" = "$ b"] echo $? –

+0

Voyons si le df ajoute de la corruption dans la variable, ce qui provoque un problème de comparaison. –

Répondre

0

La séquence analogue suivante a fonctionné pour moi:

x=$(df -n /dev | grep dev) 
y="devfs    226 226   0 100% /dev" 
[[ $x == $y ]] 
echo $? 
# -> 0 

Comme dans la plupart des situations de débogage, la chose à faire est diviser pour mieux régner. Faites la chose la plus simple qui fonctionne réellement et faites-en progressivement l'apparence de votre problème, ou faites en sorte que votre problème ressemble à cela.

Dans ce cas, vous pouvez capturer la sortie dans un fichier (ou faire ce que suggère @chepner et le faire passer par od) et l'examiner en détail, en cherchant par exemple. les caractères de tabulation; Alternativement, vous pouvez essayer des commandes dont la sortie est encore plus simple que votre df.

+0

Il y a 4 espaces de fin que j'ai raté. Cela fonctionne maintenant. Merci a tous. – techie11