Come modificare il valore di un argomento in uno script?


11

Ho provato il seguente piccolo script semplice:

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

Ma quando corro ./script fooottengo un errore e il valore non viene modificato:

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

So che $ 1 è il primo argomento che passi alla tua sceneggiatura. Ma anche così voglio cambiarne il valore.


Risposte:


10

Puoi usare il builtin set:

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

Fonte e altro su: Cambia un argomento della riga di comando - bash .


Ci ho provato, ma ha fatto ancora eco "pippo". Hai ottenuto risultati diversi? Assicurati di passare "pippo" alla sceneggiatura.
Marty Fried

@MartyFried Ups, scusa ... ho appena aggiornato la mia risposta.
Radu Rădeanu,

Che funzioni. :-) Buona risposta ... Penso che stavo supponendo che non volesse farlo, e non sono sicuro del perché, ma la tua risposta è in realtà più corretta del mio suggerimento di semplicemente non farlo. Grazie per il link
Marty Fried

4

Non è possibile modificare direttamente tali variabili. Potresti dire:

x=$1
echo $x

Quindi puoi usare $xinvece

L'uso $1=barsostituirà immediatamente il primo parametro $1e, in sostanza "foo=bar", si sta affermando , ed è interpretato come un comando "pippo", non una variabile "pippo";


Bella idea, ma dipende da cosa esattamente vuole che l'OP compia ... +1 da me.
Radu Rădeanu,

2

Non usare use $1per questo, in bashe altre shell, $1è il primo argomento che passi allo script:

#!/bin/bash
echo $1

Se si esegue quanto sopra come foo.sh hello, verrà stampato hellopoiché questo è il 1 ° argomento. Inoltre, fai riferimento a una variabile come vare al contenuto di una variabile come $var. Quindi, per ottenere il comportamento che ti aspetti, usa un altro nome per la tua variabile e non usare un $:

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

Questa piccola sceneggiatura era solo un esempio per far capire alle persone quello che volevo. So che $ 1 è il primo argomento che passi alla tua sceneggiatura. Ma anche così voglio cambiare il suo valore. Devo applicarlo in un altro grande copione. Grazie.
user258266

@ user258266 no. Basta chiamare il grande script con il nuovo valore, non utilizzare $1per i valori che si desidera modificare. Ad ogni modo, fintanto che correggi l'errore di sintassi, dovrebbe funzionare, il tuo problema principale era che stavi usando $.
terdon,

Ma ho bisogno ... Non posso spiegare qui perché ... Forse modificherò la mia domanda.
user258266

@ user258266, per favore. Stai cercando di impostare una variabile come $foo="bar", che non funziona, è necessario foo="bar"senza il $.
terdon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.