Parfois, il est nécessaire d'émuler et de vérifier les variables ci-dessus dans de petits exemples, puis de les copier immédiatement dans un script, etc.
J'ai essayé de résoudre en utilisant un exemple simple de la manière suivante:
(find $1) /tmp
sh -c '(find $1) /tmp'
sh -c "find $1" /tmp
echo '(find $1) /tmp' | sh
et avec d'autres combinaisons. Expérimenté également en ajoutant la directive d'interprétation shebang #!/bin/sh -x
, mais n'a pas obtenu le résultat souhaité.
Puis-je faire cela simplement?
(find $1) /tmp
est une erreur de syntaxe.(any-command) more-arguments
Est en fait une erreur de syntaxe. Pouvez-vous expliquer différemment ce que vous essayez de faire?rc
famille (rc
,es
,akanga
...), où dans ce cas , qui est équivalent àfind $1 /tmp
.Réponses:
Le premier argument après
sh -c inline-script
va à$0
(qui est également utilisé pour les messages d'erreur), et le reste entre$1
,$2
...Alors tu veux:
(dans les temps anciens, vous pouviez trouver des
sh
implémentations où le premier argument est entré à la$1
place, vous feriez donc:Ou:
pour tenir compte des deux comportements, mais ces coquilles ont disparu maintenant que POSIX est répandu et accessible au public).
Si vous souhaitez définir
$1
,$2
dans une portée locale dans le shell actuel, c'est là que vous utiliserez les fonctions. En coquilles de type Bourne:Certains shells prennent en charge les fonctions anonymes. C'est le cas de
zsh
:Ou
es
:Pour modifier définitivement les paramètres de position actuels, la syntaxe dépend du shell. dchirikov a déjà couvert la Bourne comme des coquilles (Bourne, Korn,
bash
,zsh
, Posixash
,yash
...).La syntaxe est:
Cependant, vous avez besoin de:
Pour vider cette liste (ou
shift "$#"
) etpour définir
$1
quelque chose commençant par-
ou+
, c'est donc une bonne habitude de toujours l'utiliser, enset --
particulier lorsque vous utilisez des données arbitraires, commeset -- "$@" other-arg
pour ajouter des arguments à la fin de la liste des paramètres positionnels.Dans les shells de la
csh
famille (csh
,tcsh
), vous affectez auargv
tableau:Dans les coquilles de la
rc
famille (rc
,es
,akanga
), au*
tableau:Bien que vous puissiez également affecter des éléments individuellement:
Dans
fish
, les paramètres positionnels sont dans leargv
tableau uniquement (non$1
,$@
là):Dans
zsh
, pour des raisons de compatibilité aveccsh
, vous pouvez également affecter auargv
tableau:Et vous pouvez aussi faire:
Cela signifie que vous pouvez également faire des choses comme:
pour ajouter un argument à la fin, et:
pour supprimer un argument de la fin ou du milieu, ce que vous ne pouvez pas faire facilement avec d'autres shells.
la source
est ce dont vous avez besoin:
la source