est il possible de faire un passage d'argument transparent ?
parce que je crois que $? donne 2 arguments si y en a un seul qui
contien un espace,
et "$?" c'est le contraire, ca regroupe tous les arguments en un seul
non ?
--
si je dors : wakeonlan -i tDeContes.hd.free.fr 00:03:93:AF:45:AE
(seulement dans le 1/4 h où mon ordi est mis en veille,
donc je vous invite à réclamer à free : l'acces à arp -s,
ou la possibilité de rediriger le NAT sur l'adresse de broadcast :-) )
"don't put your PC out of the window, put windows out of your PC"
"petit Free qui devient grand, gêne les requins blancs"
est il possible de faire un passage d'argument transparent ?
parce que je crois que $? donne 2 arguments si y en a un seul qui contien un espace, et "$?" c'est le contraire, ca regroupe tous les arguments en un seul non ?
$?, c'est l'exit status de la derniere commande.
cmd "$@"
(Avec les guillemets).
-- Stephane
2004-12-20, 00:13(+01), Thomas:
est il possible de faire un passage d'argument transparent ?
parce que je crois que $? donne 2 arguments si y en a un seul qui
contien un espace,
et "$?" c'est le contraire, ca regroupe tous les arguments en un seul
non ?
est il possible de faire un passage d'argument transparent ?
parce que je crois que $? donne 2 arguments si y en a un seul qui contien un espace, et "$?" c'est le contraire, ca regroupe tous les arguments en un seul non ?
$?, c'est l'exit status de la derniere commande.
cmd "$@"
(Avec les guillemets).
-- Stephane
cedric
Stephane Chazelas wrote:
est il possible de faire un passage d'argument transparent ?
cmd "$@"
Dans ce cas, cmd ne recevra t-il pas qu'un seul argument ? Pour faire un passage de paramètre "transparent", il faudrait qu'il en reçoive le même nombre, donc en omettant les guillemets, non ?
Où ai-je faux ?
Stephane Chazelas wrote:
est il possible de faire un passage d'argument transparent ?
cmd "$@"
Dans ce cas, cmd ne recevra t-il pas qu'un seul argument ?
Pour faire un passage de paramètre "transparent", il faudrait qu'il en
reçoive le même nombre, donc en omettant les guillemets, non ?
est il possible de faire un passage d'argument transparent ?
cmd "$@"
Dans ce cas, cmd ne recevra t-il pas qu'un seul argument ? Pour faire un passage de paramètre "transparent", il faudrait qu'il en reçoive le même nombre, donc en omettant les guillemets, non ?
Où ai-je faux ?
Stephane Chazelas
2004-12-20, 11:17(+01), cedric:
Stephane Chazelas wrote:
est il possible de faire un passage d'argument transparent ?
cmd "$@"
Dans ce cas, cmd ne recevra t-il pas qu'un seul argument ? Pour faire un passage de paramètre "transparent", il faudrait qu'il en reçoive le même nombre, donc en omettant les guillemets, non ?
Où ai-je faux ?
"$@" (avec les guillemets) est special et fait pour ca.
"$*" serait un seul argument.
-- Stephane
2004-12-20, 11:17(+01), cedric:
Stephane Chazelas wrote:
est il possible de faire un passage d'argument transparent ?
cmd "$@"
Dans ce cas, cmd ne recevra t-il pas qu'un seul argument ?
Pour faire un passage de paramètre "transparent", il faudrait qu'il en
reçoive le même nombre, donc en omettant les guillemets, non ?
Où ai-je faux ?
"$@" (avec les guillemets) est special et fait pour ca.
est il possible de faire un passage d'argument transparent ?
cmd "$@"
Dans ce cas, cmd ne recevra t-il pas qu'un seul argument ? Pour faire un passage de paramètre "transparent", il faudrait qu'il en reçoive le même nombre, donc en omettant les guillemets, non ?
Où ai-je faux ?
"$@" (avec les guillemets) est special et fait pour ca.
In article (Dans l'article) , Stephane Chazelas wrote (écrivait) :
2004-12-20, 11:17(+01), cedric:
Stephane Chazelas wrote:
est il possible de faire un passage d'argument transparent ?
cmd "$@"
Dans ce cas, cmd ne recevra t-il pas qu'un seul argument ? Pour faire un passage de paramètre "transparent", il faudrait qu'il en reçoive le même nombre, donc en omettant les guillemets, non ?
Où ai-je faux ?
"$@" (avec les guillemets) est special et fait pour ca.
"$*" serait un seul argument.
ah oui, j'ai confondu $* et $? (de tete) :-)
merci :-)
et effectivement, que fait $@ ? :-)
-- si je dors : wakeonlan -i tDeContes.hd.free.fr 00:03:93:AF:45:AE (seulement dans le 1/4 h où mon ordi est mis en veille, donc je vous invite à réclamer à free : l'acces à arp -s, ou la possibilité de rediriger le NAT sur l'adresse de broadcast :-) )
"don't put your PC out of the window, put windows out of your PC" "petit Free qui devient grand, gêne les requins blancs"
In article (Dans l'article)
<slrncsdaqm.4h3.stephane.chazelas@spam.is.invalid>,
Stephane Chazelas <cette.adresse@est.invalid> wrote (écrivait) :
2004-12-20, 11:17(+01), cedric:
Stephane Chazelas wrote:
est il possible de faire un passage d'argument transparent ?
cmd "$@"
Dans ce cas, cmd ne recevra t-il pas qu'un seul argument ?
Pour faire un passage de paramètre "transparent", il faudrait qu'il en
reçoive le même nombre, donc en omettant les guillemets, non ?
Où ai-je faux ?
"$@" (avec les guillemets) est special et fait pour ca.
"$*" serait un seul argument.
ah oui, j'ai confondu $* et $? (de tete) :-)
merci :-)
et effectivement, que fait $@ ? :-)
--
si je dors : wakeonlan -i tDeContes.hd.free.fr 00:03:93:AF:45:AE
(seulement dans le 1/4 h où mon ordi est mis en veille,
donc je vous invite à réclamer à free : l'acces à arp -s,
ou la possibilité de rediriger le NAT sur l'adresse de broadcast :-) )
"don't put your PC out of the window, put windows out of your PC"
"petit Free qui devient grand, gêne les requins blancs"
In article (Dans l'article) , Stephane Chazelas wrote (écrivait) :
2004-12-20, 11:17(+01), cedric:
Stephane Chazelas wrote:
est il possible de faire un passage d'argument transparent ?
cmd "$@"
Dans ce cas, cmd ne recevra t-il pas qu'un seul argument ? Pour faire un passage de paramètre "transparent", il faudrait qu'il en reçoive le même nombre, donc en omettant les guillemets, non ?
Où ai-je faux ?
"$@" (avec les guillemets) est special et fait pour ca.
"$*" serait un seul argument.
ah oui, j'ai confondu $* et $? (de tete) :-)
merci :-)
et effectivement, que fait $@ ? :-)
-- si je dors : wakeonlan -i tDeContes.hd.free.fr 00:03:93:AF:45:AE (seulement dans le 1/4 h où mon ordi est mis en veille, donc je vous invite à réclamer à free : l'acces à arp -s, ou la possibilité de rediriger le NAT sur l'adresse de broadcast :-) )
"don't put your PC out of the window, put windows out of your PC" "petit Free qui devient grand, gêne les requins blancs"
Stephane Chazelas
2004-12-20, 14:47(+01), cedric:
Mais quelle est la différence entre $@ et "$@" ?
Le comportement de $@ depend des shell. $@ et $* sont censé etre la meme chose. Leur comportement est censé differer qu'a l'interieur de quotes.
La valeur de $@ et $* est censée etre optenue en concatenant les positional parameters avec une espace (Bourne shell ou si IFS n'est pas defini) ou le premier caractere d'IFS ou collés si IFS est defini mais vide (autres shells).
Apres, $@ et $* sans leur quote sont sujet a word splitting et filename generation.
bash et certaines versions de ksh ont des comportements un peu aberants pour $@ et $* sant les quotes suivant les valeurs d'IFS.
zsh (excepté en emulation sh ou ksh) a un comportement different car il a des variables (correctement) typees. Donc $* et $@ sont des arrays avec la semantique ordinaire des arrays de zsh ($@ est un raccourci pour ${argv[@]} et $* pour ${argv[*]})
cmd $* ou cmd $@ ou cmd $argv
et cmd recoit les positional parameters non-vide.
cmd "$@" ou cmd "${argv[@]}" ou cmd "${(@)argv}"
et cmd recoit les positional parameters meme les vides.
cmd "$*" ou cmd "${argv[*]}"
et cmd recoit la concatenation des positional parameters avec le premier caractere d'IFS
2004-12-20, 14:47(+01), cedric:
Mais quelle est la différence entre $@ et "$@" ?
Le comportement de $@ depend des shell. $@ et $* sont censé etre
la meme chose. Leur comportement est censé differer qu'a
l'interieur de quotes.
La valeur de $@ et $* est censée etre optenue en concatenant les
positional parameters avec une espace (Bourne shell ou si IFS
n'est pas defini) ou le premier caractere d'IFS ou collés si IFS
est defini mais vide (autres shells).
Apres, $@ et $* sans leur quote sont sujet a word splitting et
filename generation.
bash et certaines versions de ksh ont des comportements un peu
aberants pour $@ et $* sant les quotes suivant les valeurs
d'IFS.
zsh (excepté en emulation sh ou ksh) a un comportement different
car il a des variables (correctement) typees. Donc $* et $@ sont
des arrays avec la semantique ordinaire des arrays de zsh ($@
est un raccourci pour ${argv[@]} et $* pour ${argv[*]})
cmd $*
ou
cmd $@
ou
cmd $argv
et cmd recoit les positional parameters non-vide.
cmd "$@"
ou
cmd "${argv[@]}"
ou
cmd "${(@)argv}"
et cmd recoit les positional parameters meme les vides.
cmd "$*"
ou
cmd "${argv[*]}"
et cmd recoit la concatenation des positional parameters avec le
premier caractere d'IFS
Le comportement de $@ depend des shell. $@ et $* sont censé etre la meme chose. Leur comportement est censé differer qu'a l'interieur de quotes.
La valeur de $@ et $* est censée etre optenue en concatenant les positional parameters avec une espace (Bourne shell ou si IFS n'est pas defini) ou le premier caractere d'IFS ou collés si IFS est defini mais vide (autres shells).
Apres, $@ et $* sans leur quote sont sujet a word splitting et filename generation.
bash et certaines versions de ksh ont des comportements un peu aberants pour $@ et $* sant les quotes suivant les valeurs d'IFS.
zsh (excepté en emulation sh ou ksh) a un comportement different car il a des variables (correctement) typees. Donc $* et $@ sont des arrays avec la semantique ordinaire des arrays de zsh ($@ est un raccourci pour ${argv[@]} et $* pour ${argv[*]})
cmd $* ou cmd $@ ou cmd $argv
et cmd recoit les positional parameters non-vide.
cmd "$@" ou cmd "${argv[@]}" ou cmd "${(@)argv}"
et cmd recoit les positional parameters meme les vides.
cmd "$*" ou cmd "${argv[*]}"
et cmd recoit la concatenation des positional parameters avec le premier caractere d'IFS
@ Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, each parameter expands to a separate word. That is, "$@" is equivalent to "$1" "$2" ... When there are no positional parameters, "$@" and $@ expand to nothing (i.e., they are removed).
En français : Developpe les paramètres passés à partir du premier ($1). Quand ce developpement est fait entre doubles quotes, chaque parametre est developpé en un argument séparé. Donc "$@" est équivalent à "$1" "$2"... S'il n'y a pas de parametres, "$@" et $@ sont développés en liste vide (pas d'arguments).
Thomas wrote:
et effectivement, que fait $@ ? :-)
Man bash|ksh|sh|etc.
Paragraphe "Special Parameters"
@ Expands to the positional parameters, starting from
one. When the expansion occurs within double
quotes, each parameter expands to a separate word.
That is, "$@" is equivalent to "$1" "$2" ... When
there are no positional parameters, "$@" and $@
expand to nothing (i.e., they are removed).
En français :
Developpe les paramètres passés à partir du premier ($1). Quand ce
developpement est fait entre doubles quotes, chaque parametre est
developpé en un argument séparé. Donc "$@" est équivalent à "$1" "$2"...
S'il n'y a pas de parametres, "$@" et $@ sont développés en liste vide
(pas d'arguments).
@ Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, each parameter expands to a separate word. That is, "$@" is equivalent to "$1" "$2" ... When there are no positional parameters, "$@" and $@ expand to nothing (i.e., they are removed).
En français : Developpe les paramètres passés à partir du premier ($1). Quand ce developpement est fait entre doubles quotes, chaque parametre est developpé en un argument séparé. Donc "$@" est équivalent à "$1" "$2"... S'il n'y a pas de parametres, "$@" et $@ sont développés en liste vide (pas d'arguments).
drkm
Christian CAMIER writes:
@ Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, each parameter expands to a separate word.
Que se passe-t-il avec "x$@" ?
--drkm
Christian CAMIER <chcamier@nospam-free.fr> writes:
@ Expands to the positional parameters, starting from
one. When the expansion occurs within double
quotes, each parameter expands to a separate word.
@ Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, each parameter expands to a separate word.
Que se passe-t-il avec "x$@" ?
--drkm
Stephane Chazelas
2004-12-21, 00:56(+01), Christian CAMIER:
Thomas wrote:
et effectivement, que fait $@ ? :-)
Man bash|ksh|sh|etc.
Paragraphe "Special Parameters"
@ Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, each parameter expands to a separate word. That is, "$@" is equivalent to "$1" "$2" ... When there are no positional parameters, "$@" and $@ expand to nothing (i.e., they are removed).
En français : Developpe les paramètres passés à partir du premier ($1). Quand ce developpement est fait entre doubles quotes, chaque parametre est developpé en un argument séparé. Donc "$@" est équivalent à "$1" "$2"... S'il n'y a pas de parametres, "$@" et $@ sont développés en liste vide (pas d'arguments).
Et tu remarqueras, que a l'exterieur des doubles quotes, ce n'est pas vraiment defini (ni par POSIX). C'est pour ca qu'on a des comportements differents suivants les shells. Meme a l'interieur des quotes, ce n'est pas defini partout. Par exemple:
var="$@" case $* in set '*' '?' echo ${var#"$@"}
qui se comportent differemment suivant les shells.
La formulation Bourne etait pourtant limpide, c'est dommage que les autres shells (a part zsh et ksh) ne s'en soient pas inspiré.
-- Stephane
2004-12-21, 00:56(+01), Christian CAMIER:
Thomas wrote:
et effectivement, que fait $@ ? :-)
Man bash|ksh|sh|etc.
Paragraphe "Special Parameters"
@ Expands to the positional parameters, starting from
one. When the expansion occurs within double
quotes, each parameter expands to a separate word.
That is, "$@" is equivalent to "$1" "$2" ... When
there are no positional parameters, "$@" and $@
expand to nothing (i.e., they are removed).
En français :
Developpe les paramètres passés à partir du premier ($1). Quand ce
developpement est fait entre doubles quotes, chaque parametre est
developpé en un argument séparé. Donc "$@" est équivalent à "$1" "$2"...
S'il n'y a pas de parametres, "$@" et $@ sont développés en liste vide
(pas d'arguments).
Et tu remarqueras, que a l'exterieur des doubles quotes, ce
n'est pas vraiment defini (ni par POSIX). C'est pour ca qu'on a
des comportements differents suivants les shells. Meme a
l'interieur des quotes, ce n'est pas defini partout. Par
exemple:
var="$@"
case $* in
set '*' '?'
echo ${var#"$@"}
qui se comportent differemment suivant les shells.
La formulation Bourne etait pourtant limpide, c'est dommage que
les autres shells (a part zsh et ksh) ne s'en soient pas
inspiré.
@ Expands to the positional parameters, starting from one. When the expansion occurs within double quotes, each parameter expands to a separate word. That is, "$@" is equivalent to "$1" "$2" ... When there are no positional parameters, "$@" and $@ expand to nothing (i.e., they are removed).
En français : Developpe les paramètres passés à partir du premier ($1). Quand ce developpement est fait entre doubles quotes, chaque parametre est developpé en un argument séparé. Donc "$@" est équivalent à "$1" "$2"... S'il n'y a pas de parametres, "$@" et $@ sont développés en liste vide (pas d'arguments).
Et tu remarqueras, que a l'exterieur des doubles quotes, ce n'est pas vraiment defini (ni par POSIX). C'est pour ca qu'on a des comportements differents suivants les shells. Meme a l'interieur des quotes, ce n'est pas defini partout. Par exemple:
var="$@" case $* in set '*' '?' echo ${var#"$@"}
qui se comportent differemment suivant les shells.
La formulation Bourne etait pourtant limpide, c'est dommage que les autres shells (a part zsh et ksh) ne s'en soient pas inspiré.