<Anterior | Contenido | Siguiente>
Manejo de parámetros posicionales Mucho
A veces es útil gestionar todos los parámetros posicionales como un grupo. Por ejemplo, podríamos querer escribir un "envoltorio" alrededor de otro programa. Esto significa que creamos un script o función de shell que simplifica la invocación de otro programa. El contenedor, en este caso, proporciona una lista de opciones de línea de comandos arcanas y luego pasa una lista de argumentos al programa de nivel inferior.
El shell proporciona dos parámetros especiales para este propósito. Ambos se expanden en la lista completa de parámetros posicionales, pero difieren de manera bastante sutil. Son:
Tabla 32-1: Los parámetros especiales * And @
Descripción de parámetros
Descripción de parámetros
$ * Se expande a la lista de parámetros posicionales, comenzando con 1. Cuando está rodeado por comillas dobles, se expande en una cadena entre comillas dobles que contiene todos los parámetros posicionales, cada uno separado por el primer carácter de la variable de shell IFS (por defecto, un espacio personaje).
$ @ Se expande a la lista de parámetros posicionales, comenzando con 1. Cuando está rodeado por comillas dobles, expande cada parámetro posicional en una palabra separada rodeada por comillas dobles.
Aquí hay un script que muestra estos parámetros especiales en acción:
Manejo de parámetros posicionales en masa
#! / Bin / bash
# posit-params3: script para demostrar $ * y $ @ print_params () {
echo "\ $ 1 = $ 1" echo "\ $ 2 = $ 2" echo "\ $ 3 = $ 3" echo "\ $ 4 = $ 4"
}
contraseña_parámetros () {
echo -e "\ n" '$ *:'; print_params $ * echo -e "\ n" '"$ *":'; print_params "$ *" echo -e "\ n" '$ @:'; print_params $ @ echo -e "\ n" '"$ @":'; print_params "$ @"
}
pass_params "palabra" "palabras con espacios"
#! / Bin / bash
# posit-params3: script para demostrar $ * y $ @ print_params () {
echo "\ $ 1 = $ 1" echo "\ $ 2 = $ 2" echo "\ $ 3 = $ 3" echo "\ $ 4 = $ 4"
}
contraseña_parámetros () {
echo -e "\ n" '$ *:'; print_params $ * echo -e "\ n" '"$ *":'; print_params "$ *" echo -e "\ n" '$ @:'; print_params $ @ echo -e "\ n" '"$ @":'; print_params "$ @"
}
pass_params "palabra" "palabras con espacios"
En este programa bastante complicado, creamos dos argumentos: "palabra" y "palabras con espacios", y los pasamos al pass_params función. Esa función, a su vez, las traspasa a la print_params función, utilizando cada uno de los cuatro métodos disponibles con los parámetros especiales $* y $@. Cuando se ejecuta, el script revela las diferencias:
[yo @ linuxbox ~] $ posit-param3
PS
$1 | = | palabra clave |
$2 | = | palabras |
$3 | = | con |
$4 | = | Espacios |
PS
$1 | = | palabras de palabras con espacios |
$2 | = | |
$3 | = | |
$4 | = |
PS
$1 | = | palabra clave |
$2 | = | palabras |
$3 | = | con |
$4 | = | Espacios |
PS
$ 1 = palabra
$ 2 = palabras con espacios
$ 3 =
$ 4 =
$ 2 = palabras con espacios
$ 3 =
$ 4 =
Con nuestros argumentos, ambos $* y $@ producir un resultado de cuatro palabras:
palabras de palabras con espacios
"$ *" produce un resultado de una palabra:
"palabras de palabras con espacios"
"$ @" produce un resultado de dos palabras:
"palabra" "palabras con espacios"
que coincide con nuestra intención real. La lección que se puede aprender de esto es que, aunque el shell proporciona cuatro formas diferentes de obtener la lista de parámetros posicionales, "$@"es, con mucho, el más útil para la mayoría de las situaciones, ya que preserva la integridad de cada parámetro posicional.