2011-01-28 13 views
62

C'è un modo per modificare gli argomenti della riga di comando in uno script Bash. Diciamo per esempio, uno script Bash viene invocato come segue:Modifica un argomento della riga di comando in Bash

./foo arg1 arg2 

C'è un modo per cambiare il valore della arg1 all'interno dello script? Dì, qualcosa come

$1="chintz" 

risposta

95

Devi resettare tutti gli argomenti. Per cambiare, ad es. $3:

$ set -- "${@:1:2}" "new" "${@:4}" 

Fondamentalmente è settutti argomenti ai loro valori correnti, ad eccezione di quella (s) che si desidera modificare.

Il "${@:1:2}" notation è espanso ai due (da qui il 2 nella notazione) argomenti posizionali partendo dall'offset 1 (cioè $1). È una stenografia per "$1" "$2" in questo caso, ma è molto più utile quando si desidera sostituire, ad es. "${17}".

+1

quindi, per cambiare $ 3, devo cambiare anche $ 1 e $ 2, vero? E cambiarli in cosa? Cosa significa "resettare"? – Sriram

+2

A '$ 1' e' $ 2', naturalmente. –

+0

+1: è molto bello! – Johnsyweb

17

Si sta meglio l'assegnazione $1 e $2 a variabili più significative (non so, input_filename = $1 e output_filename = $2 o qualcosa) e poi sovrascrivere una di quelle variabili (input_filename = 'chintz'), lasciando l'ingresso allo script invariato, nel caso in cui è necessario altrove.

+0

Volevo un approccio in cui potevo modificare uno degli argomenti di input. Avevo bisogno di farlo poiché volevo restituire un valore dalla sceneggiatura. La risposta suggerita da thkala ha funzionato bene. Grazie per la risposta!!! – Sriram

+3

@Johnsyweb Concordato. Per motivi di leggibilità, il tuo è il metodo migliore. – Dss

Problemi correlati