Le nom de la variable shell interrogée par Matlab a un caractère supplémentaire

Je travaille avec le script suivant, run_test:

#!/bin/sh temp=$1; cat <<EOF | matlab [status name] = unix('echo $temp'); disp(name); % some Matlab code test_complete = 1; save(name) exit EOF 

Je veux passer un nom au script, exécuter du code puis enregistrer un fichier .mat avec le nom qui a été transmis. Cependant, il y a un curieux comportement:

 [energon2] ~ $ ./run_test 'run1' Warning: No display specified. You will not be able to display graphics on the screen.  Copyright 1984-2010 The MathWorks, Inc. Version 7.12.0.635 (R2011a) 64-bit (glnxa64) March 18, 2011 To get started, type one of these: helpwin, helpdesk, or demo. For product information, visit www.mathworks.com. >> >> >> >> run1 >> >> >> >> >> [energon2] ~ $ ls *.mat run1?.mat 

Il y a un “?” à la fin du nom du fichier lorsqu’il est enregistré, mais pas lorsqu’il est affiché sur la ligne de commande. Ceci est acceptable pour mes besoins, mais un peu irritant de ne pas savoir pourquoi cela se produit. Toute explication serait appréciée.

Modifications, solution: Yuk était correct ci-dessous dans la cause sous-jacente et l’utilisation de save (‘$ temp’). J’utilise maintenant le script suivant

 #!/bin/sh temp=$1; cat <<EOF | matlab % some Matlab code test_complete = 1; save('$temp') exit EOF 

Merci pour l’aide.

Vous name variable a la fin de ligne comme dernier caractère. Lorsque vous exécutez echo run1 dans unix, cette commande affiche run1 puis “appuyez sur Entrée”. Dans votre script, tous les résultats de echo sont enregistrés dans la name variable .

Vous pouvez le confirmer avec les éléments suivants:

 >> format compact >> [status, name] = unix('echo run1') status = 0 name = run1 >> numel(name) ans = 5 >> int8(name(end)) ans = 10 >> int8(sprintf('\n')) ans = 10 

Apparemment, ce caractère peut faire partie d’un nom de fichier dans Unix, mais le shell l’affiche comme ? .

Ne pouvez-vous pas save($temp) place?

EDIT : Voir mes commentaires ci-dessous pour la correction et plus d’explications.