Comment changer la valeur d'un argument dans un script?


11

J'ai essayé le petit script simple suivant:

#!/bin/bash
$1="bar"
echo $1

Mais quand je cours, ./script fooj'obtiens une erreur et la valeur n'est pas modifiée:

/home/mika/script: line 2: foo=bar: command not found
foo

Je sais que $ 1 est le premier argument que vous transmettez à votre script. Mais même comme ça, je veux changer sa valeur.


Réponses:


10

Vous pouvez utiliser la fonction intégrée set:

#!/bin/bash
set -- "bar"
echo $1

Source et plus sur: Changer un argument de ligne de commande - bash .


J'ai essayé ça, mais ça faisait toujours écho "foo". Avez-vous obtenu des résultats différents? Assurez-vous de passer "foo" au script.
Marty Fried

@MartyFried Ups, désolé ... Je viens de mettre à jour ma réponse.
Radu Rădeanu

Ça marche. :-) Bonne réponse ... Je pense que je supposais qu'il ne voulait pas faire ça, et je ne sais pas pourquoi il le ferait, mais votre réponse est en fait plus correcte que ma suggestion de simplement ne pas le faire. Merci pour le lien.
Marty Fried

4

Vous ne pouvez pas modifier ces variables directement. Tu pourrais dire:

x=$1
echo $x

Ensuite, vous pouvez utiliser à la $xplace

L'utilisation $1=barremplacera immédiatement le premier paramètre pour $1, et vous déclarez essentiellement "foo=bar", et il est interprété comme une commande "foo", pas une variable "foo";


Bonne idée, mais dépend de ce que veut exactement le PO accomplir ... +1 de moi.
Radu Rădeanu

2

N'utilisez pas use $1for this, dans bashet dans d'autres shells, $1est le premier argument que vous passez à votre script:

#!/bin/bash
echo $1

Si vous exécutez ce qui précède comme foo.sh hello, il s'imprimera hellopuisque c'est le 1er argument. Vous faites également référence à une variable en tant que varet au contenu d' une variable en tant que $var. Donc, pour obtenir le comportement que vous attendez, utilisez simplement un autre nom pour votre variable et n'utilisez pas de $:

#!/bin/bash
var="bar"
echo $var

Ce petit script n'était qu'un exemple pour faire comprendre aux gens ce que je veux. Je sais que $ 1 est le premier argument que vous transmettez à votre script. Mais, même comme ça, je veux changer sa valeur. Je dois l'appliquer dans un autre gros script. Je vous remercie.
user258266

@ user258266 pas. Appelez simplement le gros script avec la nouvelle valeur, ne l'utilisez pas $1pour les valeurs que vous souhaitez modifier. Quoi qu'il en soit, tant que vous corrigez l'erreur de syntaxe, cela devrait fonctionner, votre principal problème était que vous utilisiez le $.
terdon

Mais j'ai besoin ... Je ne peux pas expliquer ici pourquoi ... Peut-être que je vais modifier ma question.
user258266

@ user258266 s'il vous plaît faire. Vous essayez de définir une variable car $foo="bar", cela ne fonctionne pas, vous avez besoin foo="bar"sans le $.
terdon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.