2011-01-28 20 views
62

¿Hay alguna manera de cambiar los argumentos de la línea de comando en un script Bash? Digamos por ejemplo, un script bash se llama la siguiente manera:Cambiar un argumento de línea de comando en Bash

./foo arg1 arg2 

¿Hay una manera de cambiar el valor de arg1 en el guión? Diga algo como

$1="chintz" 

Respuesta

95

Debe reiniciar todos los argumentos. Para cambiar, p. $3:

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

Básicamente set todos los argumentos a sus valores actuales, a excepción de la (s) que desea cambiar.

El "${@:1:2}" notation se expande para los dos (de ahí el 2 en la notación) argumentos posicionales a partir de desplazamiento 1 (es decir $1). En este caso, es una abreviatura de "$1" "$2", pero es mucho más útil cuando desea reemplazar, p. "${17}".

+1

entonces, para cambiar $ 3, debo cambiar $ 1 y $ 2 también, ¿o sí? Y cambiarlos a qué? ¿Qué significa "restablecer"? – Sriram

+2

A '$ 1' y' $ 2', por supuesto. –

+0

+1: ¡Eso es muy claro! – Johnsyweb

17

Usted es mejor asignar $1 y $2 a las variables más significativas (no sé, input_filename = $1 y output_filename = $2 o algo así) y luego sobrescribir una de esas variables (input_filename = 'chintz'), dejando la entrada a la secuencia de comandos sin cambios, en el caso es necesario en otro lugar.

+0

Quería un enfoque en el que pudiera modificar uno de los argumentos de entrada. Necesitaba hacer eso ya que quería devolver un valor del script. La respuesta sugerida por thkala funcionó bien. ¡¡¡Gracias por la respuesta!!! – Sriram

+3

@Johnsyweb De acuerdo. Por motivos de legibilidad, el tuyo es el mejor método. – Dss

Cuestiones relacionadas