2010-01-11 6 views
2

Je voudrais appeler la commande bash suivante dans Matlab:Ai-je besoin d'échapper des caractères dans cette chaîne MATLAB?

grep "Up to" ~/test_linux/vision1.1/log | awk '{print $7}' 

J'utilise system() dans Matlab, mais il se révèle des erreurs:

>> [status string]=system('grep "Up to" ~/test_linux/vision1.1/log | awk '{print $7}' ');  
??? [status string]=system('grep "Up to" ~/test_linux/vision1.1/log | awk '{print $7}' '); 

Error: Unbalanced or unexpected parenthesis or bracket. 

Ai-je besoin d'échapper à certains caractères spéciaux dans la commande bash sous forme de chaîne dans MATLAB?

Répondre

13

Cela devrait fonctionner:

[status string]=system('grep "Up to" ~/test_linux/vision1.1/log | awk ''{print $7}'' '); 

Vous devez échapper ' avec un autre ' si vous souhaitez qu'il apparaisse comme un caractère dans une chaîne. En ce qui concerne la manipulation strings in MATLAB, ' est le seul caractère avec une signification spéciale (il commence et termine la chaîne), donc c'est le seul qui a besoin d'échapper.

Mise en garde: Certaines fonctions peuvent interpréter leurs arguments de chaîne de différentes manières et nécessitent donc que certains caractères soient échappés de différentes manières. Ces exigences apparaîtront dans la documentation de chaque fonction. Un couple de ces types de fonctions du haut de ma tête:

+0

Vous vous demandez quel est le caractère d'échappement de Matlab? Est-ce toujours une citation unique? Je me souviens de la fonction printf(), c'est \. – Tim

+0

@Tim: J'ai ajouté quelques détails sur les caractères d'échappement à la réponse. – gnovice

2

Vous aurez besoin d'échapper les guillemets simples dans la chaîne de commande. Sinon, MATLAB les interprétera comme la fin de la chaîne, puis se décomposera sur les éléments qui la suivent.