Supposons que j'ai un exécutable xyz qui prend un nombre variable d'arguments de ligne de commande, et un wrapper Korn Shell Shell. xyz.ksh . Existe-t-il un moyen simple de passer tous les arguments Shell Shell tels quels à l'exécutable ?
Réponses
Trop de publicités?Vous devez utiliser :
"$@"
pour une expansion correcte des paramètres dans tous les cas. Ce comportement est le même dans bash et ksh.
La plupart du temps, $* ou $@ vous donneront ce que vous voulez. Cependant, ils développent les paramètres contenant des espaces. "$*" vous donne tous les paramètres réduits à un seul. "$@" vous donne ce qui a été réellement passé au wrapper script.
Voyez par vous-même (à nouveau, sous bash ou ksh) :
[tla ~]$ touch file1 file2 space\ file
[tla ~]$ ( test() { ls $*; }; test file1 file2 space\ file )
ls: cannot access space: No such file or directory
ls: cannot access file: No such file or directory
file1 file2
[tla ~]$ ( test() { ls $@; }; test file1 file2 space\ file )
ls: cannot access space: No such file or directory
ls: cannot access file: No such file or directory
file1 file2
[tla ~]$ ( test() { ls "$*"; }; test file1 file2 space\ file )
ls: cannot access file1 file2 space file: No such file or directory
[tla ~]$ ( test() { ls "$@"; }; test file1 file2 space\ file )
file1 file2 space file
Je pense que vous cherchez la variable $* : http://www.well.ox.ac.uk/~johnb/comp/unix/ksh.html#commandlineargs
C'est aussi connu sous le nom de $@ en bash, je crois.