Transcript

Traduccin del Manual de Referencia para Bash (version 4.1)Edicion 0.9.1 Diciembre de 2010

Chet Ramey, Case Western Reserve University Brian Fox, Free Software Foundation Mario Piar Ramrez (Traduccin)

Esta es una traduccin no autorizada de la Documentacin de Referencia de Bash. Est basada en la Edicin 4.1, para Bash versin 4.1, de Diciembre de 2009. La ltima versin original (en ingls) del Manual de Referencia de Bash se puede encontrar en el sitio oficial del programa GNU Bash: http://www.gnu.org/software/bash/bash.html

Copyright 19882009 Free Software Foundation, Inc. Se autoriza a copiar, distribuir y/o modificar este documento bajo los trminos de la GNU Free Documentation License, Versin 1.3 o cualquier versin posterior publicada por la Free Software Foundation; sin Secciones Invariantes, sin los textos de Portada y sin los textos de Contraportada. Se incluye una copia de la licencia en la seccin titulada GNU Free Documentation License en el Apndice C, seguida por una traduccin de la misma (Apndice D) obtenida de: http://docs.danexlandia.com.mx/gfdl/gfdl_es.f.html

Puede comunicar sugerencias o errores en la direccin [email protected]

Pgina ii

Datos de la Edicin original:Bash Reference Manual Reference Documentation for Bash Edition 4.1, for Bash Version 4.1. December 2009 Chet Ramey, Case Western Reserve University Brian Fox, Free Software Foundation

Bash - Manual de Referencia Documentacin de Referencia para Bash Edicin 4.1, para Bash versin 4.1 Diciembre de 2009

Chet Ramey, Case Western Reserve University Brian Fox, Free Software Foundation

Pgina iii

Presentacion de la version originalThis text is a brief description of the features that are present in the Bash shell (version 4.1, 23 December 2009). This is Edition 4.1, last updated 23 December 2009, of The GNU Bash Reference Manual, for Bash, Version 4.1. Copyright 19882009 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover texts being A GNU Manual, and with the Back-Cover Texts as in (a) below. A copy of the license is included in the section entitled GNU Free Documentation License. (a) The FSFs Back-Cover Text is: You are free to copy and modify this GNU manual. Buying copies from GNU Press supports the FSF in developing GNU and promoting software freedom. Published by the Free Software Foundation 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

Presentacion de la version original (traducida)Este texto es una breve descripcin de las caractersticas que estn presentes en la shell Bash (versin 4.1 de 23 de diciembre de 2009) Esta es la edicin 4.1, actualizada por ltima vez el 23 de diciembre de 2009, del Manual de Referencia de GNU Bash para Bash Versin 4.1 Copyright 1988-2009 Free Software Foundation, Inc. Se concede permiso para hacer y distribuir copias literales de este manual manteniendo el aviso de copyright y este aviso de autorizacin en todas las copias. Se autoriza a copiar, distribuir y/o modificar este documento bajo los trminos de la GNU Free Documentation License, Versin 1.3 o cualquier versin posterior publicada por la Free Software Foundation; sin Secciones Invariantes, con la portada A GNU Manual, y con los textos de contraportada como en el apartado (a) mostrado ms abajo. Se incluye una copia de la licencia en la seccin titulada GNU Free Documentation License. (a) El texto de contraportada de la FSF es: Eres libre de copiar y modificar este manual GNU. Comprar copias en la GNU Press da soporte a la FSF para continuar desarrollando GNU y promoviendo la libertad de software. Publicado por la Free Software Foundation 59 Temple Place, Suite 330 Boston, MA 02111-1307 USA

Pgina iv

ndice de Contenido

ndice de contenido1.-Introduccin.....................................................................................................................................9 1.1.-Qu es Bash?...........................................................................................................................9 1.2.-Qu es una shell?....................................................................................................................9 2.-Definiciones...................................................................................................................................11 3.-Caractersticas Bsicas de la Shell.................................................................................................13 3.1.-Sintaxis de la shell..................................................................................................................13 3.1.1.-Modo de operacin de la shell........................................................................................13 3.1.2.-Entrecomillado................................................................................................................14 3.1.2.1.-Carcter de Escape..................................................................................................14 3.1.2.2.-Comillas simples.....................................................................................................14 3.1.2.3.-Comillas Dobles......................................................................................................14 3.1.2.4.-Entrecomillado ANSI-C..........................................................................................14 3.1.2.5.-Traducciones Especficas de la Localizacin..........................................................15 3.1.3.-Comentarios....................................................................................................................15 3.2.-Comandos de Shell.................................................................................................................16 3.2.1.-Comandos simples..........................................................................................................16 3.2.2.-Tuberas..........................................................................................................................16 3.2.3.-Listas de Comandos........................................................................................................17 3.2.4.-Comandos Compuestos..................................................................................................17 3.2.4.1.-Construcciones Cclicas..........................................................................................18 3.2.4.2.-Construcciones Condicionales................................................................................18 3.2.4.3.-Agrupando Comandos.............................................................................................21 3.2.5.-Coprocesos......................................................................................................................22 3.3.-Funciones de Shell..................................................................................................................23 3.4.-Parmetros de Shell................................................................................................................24 3.4.1.-Parmetros posicionales..................................................................................................25 3.4.2.-Parmetros Especiales.....................................................................................................25 3.5.-Expansiones de la shell...........................................................................................................26 3.5.1.-Expansin de Llaves.......................................................................................................27 3.5.2.-Expansin de Tildes........................................................................................................27 3.5.3.-Expansin de Parmetros de Shell..................................................................................28 3.5.4.-Sustitucin de Comandos...............................................................................................31 3.5.5.-Expansin Aritmtica.....................................................................................................32 3.5.6.-Sustitucin de Procesos..................................................................................................32 3.5.7.-Separacin de palabras....................................................................................................33 3.5.8.-Expansin de Nombres de Fichero.................................................................................33 3.5.8.1.-Concordancia de Patrones.......................................................................................34 3.5.9.-Eliminacin del entrecomillado......................................................................................35 3.6.-Redirecciones.........................................................................................................................35 3.6.1.-Redireccionando la entrada.............................................................................................36 3.6.2.-Redireccionando la salida...............................................................................................36Pgina v

ndice de Contenido

3.6.3.-Anexando la salida redirigida.........................................................................................37 3.6.4.-Redirigiendo la Salida Estndar y la Salida de Error Estndar.......................................37 3.6.5.-Anexando la Salida Estndar y la Salida de Error Estndar...........................................37 3.6.6.-Documentos Internos (Here Documents).......................................................................37 3.6.7.-Cadenas Internas (Here strings)......................................................................................38 3.6.8.-Duplicando Descriptores de Fichero...............................................................................38 3.6.9.-Moviendo Descriptores de Fichero.................................................................................38 3.6.10.-Abriendo descriptores de fichero para lectura y escritura............................................38 3.7.-Ejecutando comandos.............................................................................................................39 3.7.1.-Expansin de un comando simple..................................................................................39 3.7.2.-Bsqueda y Ejecucin de Comandos..............................................................................39 3.7.3.-Entorno de Ejecucin de Comandos...............................................................................40 3.7.4.-Entorno...........................................................................................................................41 3.7.5.-Estados de Salida............................................................................................................42 3.7.6.-Seales............................................................................................................................42 3.8.-Guiones de Shell.....................................................................................................................43 4.-Comandos Internos de la Shell.......................................................................................................44 4.1.-Comandos Internos de la Shell Bourne..................................................................................44 4.2.-Comandos Internos de Bash...................................................................................................51 4.3.-Modificando el Comportamiento de la Shell..........................................................................61 4.3.1.-El comando Interno Set..................................................................................................61 4.3.2.-El Comando Interno Shopt.............................................................................................66 4.4.-Comandos Internos Especiales...............................................................................................71 5.-Variables de Shell..........................................................................................................................73 5.1.-Variables de la Shell Bourne..................................................................................................73 5.2.-Variables de Bash...................................................................................................................74 6.-Caractersticas de Bash..................................................................................................................85 6.1.-Invocando a Bash...................................................................................................................85 6.2.-Ficheros de Inicio de Bash.....................................................................................................87 6.3.-Shells Interactivas...................................................................................................................89 6.3.1.-Qu es una Shell Interactiva?........................................................................................89 6.3.2.-Es esta una shell Interactiva?........................................................................................89 6.3.3.-Comportamiento de la Shell Interactiva.........................................................................89 6.4.-Expresiones Condicionales de Bash.......................................................................................91 6.5.-Aritmtica de la Shell.............................................................................................................93 6.6.-Alias........................................................................................................................................94 6.7.-Arrays.....................................................................................................................................95 6.8.-La Pila de Directorios.............................................................................................................96 6.8.1.-Comandos Internos de la Pila de Directorios..................................................................96 6.9.-Controlando el Prompt...........................................................................................................97 6.10.-La Shell Restringida.............................................................................................................99 6.11.-El Modo POSIX de Bash......................................................................................................99 7.-Control de Tareas.........................................................................................................................103Pgina vi

ndice de Contenido

7.1.-Fundamentos del Control de Tareas.....................................................................................103 7.2.-Comandos Internos para el Control de Tareas.....................................................................104 7.3.-Variables para el Control de Tareas.....................................................................................106 8.-Edicin de la Lnea de Comandos................................................................................................107 8.1.-Introduccin a la Edicin de la Lnea de Comandos............................................................107 8.2.-Interaccin con Readline......................................................................................................107 8.2.1.-Los Fundamentos de Readline al Desnudo...................................................................108 8.2.2.-Comandos de Movimiento de Readline........................................................................108 8.2.3.-Comandos para cortar texto de Readline......................................................................109 8.2.4.-Argumentos de Readline...............................................................................................109 8.2.5.-Buscando Comandos en la Historia..............................................................................110 8.3.-El Fichero de Inicializacin de Readline..............................................................................110 8.3.1.-La Sintaxis del Fichero de Inicializacin de Readline..................................................111 8.3.2.-Construcciones de inicializacin condicionales...........................................................117 8.3.3.-Ejemplo de Fichero de Inicializacin...........................................................................118 8.4.-Comandos enlazables de Readline.......................................................................................120 8.4.1.-Comandos de Movimiento............................................................................................120 8.4.2.-Comandos para Manipular la Historia..........................................................................121 8.4.3.-Comandos para Modificar el Texto..............................................................................122 8.4.4.-Cortando y Pegando......................................................................................................123 8.4.5.-Especificando Argumentos Numricos........................................................................125 8.4.6.-Permitiendo que Readline introduzca caracteres por t................................................125 8.4.7.-Macros de Teclado........................................................................................................127 8.4.8.-Algunos comandos variados.........................................................................................127 8.5.-Modo vi de Readline............................................................................................................130 8.6.-Completado Programable.....................................................................................................130 8.7.-Comandos Internos para el Completado Programable.........................................................132 9.-Usando la Historia Interactivamente............................................................................................137 9.1.-Caractersticas de Historia de Bash......................................................................................137 9.2.-Comandos Internos para la Historia de Bash.......................................................................138 9.3.-Expansin de la Historia.......................................................................................................139 9.3.1.-Designadores de Evento...............................................................................................140 9.3.2.-Designadores de Palabra...............................................................................................140 9.3.3.-Modificadores...............................................................................................................141 10.-Instalando Bash..........................................................................................................................143 10.1.-Instalacin Bsica...............................................................................................................143 10.2.-Compiladores y Opciones...................................................................................................144 10.3.-Compilando para Mltiples Arquitecturas.........................................................................144 10.4.-Nombres de Instalacin......................................................................................................144 10.5.-Especificando el Tipo de Sistema.......................................................................................145 10.6.-Compartiendo Valores por Defecto....................................................................................145 10.7.-Controles de Operacin......................................................................................................145 10.8.-Caractersticas Opcionales..................................................................................................145Pgina vii

ndice de Contenido

Apndice A: Informando de errores................................................................................................150 C.2.-Diferencias Principales con la Shell de Bourne........................................................................151 B.1.-Diferencias de Implementacin con la Shell SVR4.2.........................................................156 Apndice C: GNU Free Documentation License............................................................................157 C.0.-PREAMBLE........................................................................................................................157 C.1.-APPLICABILITY AND DEFINITIONS............................................................................157 C.2.-VERBATIM COPYING......................................................................................................158 C.3.-COPYING IN QUANTITY.................................................................................................159 C.4.-MODIFICATIONS..............................................................................................................159 C.5.-COMBINING DOCUMENTS............................................................................................161 C.6.-COLLECTIONS OF DOCUMENTS..................................................................................161 C.7.-AGGREGATION WITH INDEPENDENT WORKS.........................................................161 C.8.-TRANSLATION.................................................................................................................162 D.0.1.-TERMINATION..............................................................................................................162 C.9.-FUTURE REVISIONS OF THIS LICENSE.......................................................................162 C.10.-RELICENSING.................................................................................................................163 C.11.-ADDENDUM: How to use this License for your documents...........................................163 Apndice D: Licencia de Documentacin Libre de GNU (Traduccin).........................................164 D.0.-PREMBULO.....................................................................................................................164 D.1.-APLICABILIDAD Y DEFINICIONES..............................................................................164 D.2.-COPIA LITERAL................................................................................................................166 D.3.-COPIADO EN CANTIDAD...............................................................................................166 D.4.-MODIFICACIONES...........................................................................................................167 D.5.-COMBINACIN DE DOCUMENTOS.............................................................................168 D.6.-COLECCIONES DE DOCUMENTOS...............................................................................169 D.7.-AGREGACIN CON TRABAJOS INDEPENDIENTES.................................................169 D.8.-TRADUCCIN...................................................................................................................169 D.9.-TERMINACIN.................................................................................................................169 D.9.1.-REVISIONES FUTURAS DE ESTA LICENCIA...........................................................170 D.10.-RE-LICENCIAMIENTO...................................................................................................170 D.11.-ADDENDUM: Cmo usar esta Licencia en sus documentos...........................................171 D.12.-Notas:.................................................................................................................................171 D.13.-Referencias:.......................................................................................................................171 Apndice E: ndices.........................................................................................................................172 E.1.-ndice de Comandos Internos de la Shell............................................................................172 E.2.-ndice de Palabras Reservadas de la Shell..........................................................................173 E.3.-ndice de Parmetros y Variables........................................................................................173 E.4.-ndice de Funciones............................................................................................................175

Pgina viii

Captulo 1: Introduccin

1.- Introduccin1.1.- Qu es Bash?Bash es la shell, o interprete de comandos, para el sistema operativo GNU. El nombre es un acrnimo para el 'Bourne-Again Shell', un juego de palabras de Stephen Bourne, el autor del predecesor directo del actual shell Unix sh, que apareci en la Sptima Edicin de la versin de Unix de los Bell Labs Research (Laboratorios de Investigacin de Bell). Bash es ampliamente compatible con sh e incorpora caractersticas muy tiles de la Korn shell ksh y la C shell csh. Busca ser una implementacin conforme al IEEE POSIX Shell y Herramientas parte de la especificacin POSIX del IEEE (estndar IEEE 1003.1). Ofrece mejoras funcionales frente a sh tanto para uso interactivo como de programacin. Aunque el sistema operativo GNU proporciona otras shells, incluida una versin de csh, la shell Bash es la shell por defecto. Al igual que el resto del software GNU, Bash es bastante portable. Actualmente corre en casi todas las versiones de Unix y en algunos sistemas operativos ms existen implementaciones independientes para las plataformas MS-DOS, OS/2, y Windows.

1.2.- Qu es una shell?En esencia una shell es simplemente un procesador de macros que ejecuta comandos. El trmino procesador de macros indica una funcionalidad donde se expanden texto y smbolos para crear expresiones ms largas. Una shell de Unix es a la vez un interprete de comandos y un lenguaje de programacin. Como interprete de comandos, la shell proporciona una interfaz de usuario para el amplio juego de utilidades GNU. Las capacidades de lenguaje de programacin permiten combinar estas utilidades. Se pueden crear archivos que contengan comandos, y que lleguen a ser comandos por si mismos. Estos nuevos comandos tienen la misma categora que los comandos del sistema situados en directorios como '/bin', permitiendo a los usuarios o grupos establecer entornos personalizados para automatizar sus tareas comunes. Las shells se pueden utilizar de modo interactivo o no-interactivo. En modo interactivo aceptan entradas desde el teclado. Cuando se ejecutan en modo no-interactivo, las shells ejecutan comandos ledos desde un fichero. Una shell permite la ejecucin de comandos GNU tanto de forma sncrona como asncrona. La shell espera hasta que se completan los comandos sncronos antes de aceptar ms entradas; los comandos asncronos continan ejecutndose paralelamente a la shell mientras que esta lee y ejecuta otros comandos. La redireccin permite un control detallado de la entrada y la salida de estos comandos. Ms an, la shell permite controlar el contenido de los entornos de los comandos. Las shells tambin proporcionan un pequeo juego de comandos internos (builtins) implementando funcionalidades que mediante utilidades separadas seran imposibles de obtener o lo haran de forma poco apropiada. Por ejemplo, no se puede implementar a cd, break, continue y exec fuera de la shell porque estas manipulan directamente la propia shell. Los comandos internos history, getopts, kill o pwd, a parte de otros, pueden ser implementados en utilidades separadas, pero son ms convenientes usados como comandos internos. Todos los comandos internos de la shell sern descritos en las secciones siguientes. Mientras que la ejecucin de comandos es esencial, gran parte del poder (y complejidad) de laPgina 9

Captulo 1: Introduccin

shell se debe a los lenguajes de programacin embebidos en ella. Como cualquier lenguaje de alto nivel, la shell proporciona variables, construcciones de control del flujo, entrecomillado y funciones. Las shells ofrecen caractersticas orientadas especficamente para el uso interactivo ms que para aumentar el lenguaje de programacin. Estas caractersticas interactivas incluyen control de tareas, edicin de la linea de comandos, historia de comandos y alias. Cada una de estas caractersticas son descritas en este manual.

Pgina 10

Captulo 2: Definiciones

2.- DefinicionesEstas definiciones son usadas a lo largo de este manual POSIX Una familia de estndares libres basados en Unix. Bash se ve afectado principalmente por la parte Shell y Utilidades del estndar POSIX 1003.1. blanco (blank) Un carcter espacio o tabulador comando interno o builtin Un comando que es implementado internamente por la shell, en vez de por un programa ejecutable en algn lugar del sistema de ficheros. operadores de control Un token que realiza una funcin de control. Es una nueva linea o alguno de los siguientes: ||, &&, &, ;, ;;, |, |&, (, o ). estado de salida El valor retornado por un comando a su llamador. Este valor est restringido a ocho bits, as que el valor mximo es 255. campo Una unidad de texto que es el resultado de una de las expansiones de la shell. Tras la expansin, cuando se ejecuta un comando, los campos resultantes se utilizan como nombre de comando y argumentos nombre de archivo Una cadena de caracteres usada para identificar un archivo. tarea Un juego de procesos que componen una tubera, y los procesos que descienden de estos, que estn todos en el mismo grupo de procesos. control de tareas Un mecanismo por el cual los usuarios pueden parar (suspender) y reiniciar (reanudar) selectivamente la ejecucin de procesos. metacaracter Un carcter que, cuando se encuentra sin entrecomillar, separa palabras. Un metacaracter es un blanco o uno de los siguientes caracteres: |, &, ;, (, ), . nombre Una palabra consistente nicamente en letras, nmeros y caracteres de subrayado, y que comienza con una letra o un carcter de subrayado. Los nombres se usan como nombres de variables de shell y de funciones. Tambin se le llama identificador. operador Un operador de control o un operador de redireccin. Vea en la seccin 3.6 [Redirecciones], una lista de operadores de redireccin. Los operadores contienen al menos unPgina 11

Captulo 2: Definiciones

metacaracter sin entrecomillar. grupo de procesos Una coleccin o procesos relacionados cada uno de los cuales tiene el mismo identificador de grupo de procesos. identificador (o ID) de grupo de procesos Un identificador nico que representa un grupo de procesos durante su tiempo de vida. palabra reservada Una palabra que tiene un significado especial para la shell. La mayora de las palabras reservadas introducen en la shell construcciones de control de flujo, como for y while. estado de retorno Un sinnimo para el estado de salida. seal Un mecanismo por el que cualquier proceso puede ser notificado por el kernel de un evento ocurrido en el sistema. comandos internos especiales Un comando interno de la shell que ha sido clasificado como especial por el estndar POSIX token (o componente lxico) Una secuencia de caracteres considerados una unidad nica por el shell. Puede ser bien una palabra o un operador. palabra Una secuencia de caracteres tratados como una unidad por el shell. Las palabras no pueden incluir metacaracteres sin entrecomillar.

Pgina 12

Capitulo 3: Caractersticas Bsicas del Shell

3.- Caractersticas Bsicas de la ShellBash es un acrnimo para 'Bourne-Again Shell'. La shell Bourne es la shell Unix tradicional escrita originalmente por Stephen Bourne. Todos los comandos internos de la shell Bourne estn disponibles en Bash. Las reglas para evaluacin y entrecomillado estn tomadas de la especificacin POSIX para la shell Unix 'estndar'. Este captulo resume brevemente los 'bloques de construccin' de la shell: comandos, estructuras de control, funciones de shell, parmetros de shell, expansiones de shell, redirecciones, que son un modo de dirigir la entrada y la salida desde y hacia un nombre de archivo, y la forma en la que la shell ejecuta comandos.

3.1.- Sintaxis de la shellCuando la shell lee una entrada, procede a realizar una secuencia de operaciones. Si la entrada indica el principio de un comentario, la shell ignora el signo de comentario ('#') y el resto de esa lnea. En caso contrario, hablando de forma aproximada, la shell lee su entrada y divide esta en palabras y operadores, empleando las reglas de entrecomillado para seleccionar qu significado debe asignar a las palabras y caracteres. La shell luego analiza esos tokens en comandos y otras construcciones, elimina el significado especial de ciertas palabras o caracteres, expande otras, redirecciona la entrada y la salida segn sea necesario, ejecuta los comandos especificados, espera por el estado de salida de los comandos, y pone disponible ese estado de salida para favorecer su inspeccin o procesamiento.

3.1.1.- Modo de operacin de la shellLo que sigue es una breve descripcin del modo en que trabaja la shell cuando esta lee y ejecuta un comando. Bsicamente, la shell hace lo siguiente: 1. Lee su entrada desde un archivo (vea la Seccin 3.8 [Guiones de shell]), desde una cadena suministrada como un argumento a la opcin de invocacin '-c' (vea la Seccin 6.1 [Invocando a Bash], o desde la terminal del usuario. 2. Rompe la entrada en palabras y operadores, obedeciendo las reglas de entrecomillado descritas en la Seccin 3.1.2 [Entrecomillado]. Estos tokens estn separados por metacaracteres. La expansin de Alias se realiza en este paso (vea Seccin 6.6 [Alias] 3. Analiza sintcticamente los tokens en comandos simples y compuestos (vea Seccin 3.2 [Comandos de Shell]) 4. Realiza varias expansiones de shell (vea la Seccin 3.5 [Expansiones de la Shell], rompe los tokens expandidos en listas de nombres de ficheros (vea Seccin 3.5.8 [Expansin de Nombres de Fichero]) y comandos y argumentos. 5. Realiza cualquier redireccin que sea necesaria (vea la Seccin 3.6 [Redirecciones]) y elimina los operadores de redireccin y sus operandos de la lista de argumentos. 6. Ejecuta el comando (vea la Seccin 3.7 [Ejecutando Comandos]). 7. Opcionalmente espera hasta que se complete la ejecucin del comando y recolecta su estado de salida (vea la Seccin 3.7.5 [Estados de salida]).

Pgina 13

Capitulo 3: Caractersticas Bsicas del Shell

3.1.2.- EntrecomilladoEl entrecomillado se utiliza para eliminar el significado especial a ciertos caracteres o palabras para la shell. El entrecomillado se puede utilizar para eliminar el tratamiento especial para los caracteres especiales, o para prevenir a las palabras reservadas de ser reconocidas como tales, y para prevenir la expansin de parmetros. Cada uno de los metacaracteres de shell (vea el Captulo 2 [Definiciones]) tiene un significado especial para el shell y debe ser entrecomillado si se representa a s mismo. Cuando se est usando las habilidades de expansin de la historia de comandos (vea la Seccin 9.3 [Interacciones con la Historia]), el carcter de expansin de la historia, normalmente '!', debe ser entrecomillado para prevenir la expansin de la historia. Vea la Seccin 9.1 [Caractersticas de Historial de Bash], para ms detalles concernientes a la expansin de la historia. Hay tres mecanismos de entrecomillado: El carcter de escape, las comillas simples y las comillas dobles.3.1.2.1.- Carcter de Escape

El carcter de escape consiste en una barra invertida sin entrecomillar '\'. Esta mantiene el valor literal del carcter que le sigue, con la excepcin de la nueva lnea. Si aparece una pareja \nueva_linea esta es tratada como una continuacin de lnea (esto es, esta es eliminada del flujo de entrada e ignorada completamente).3.1.2.2.- Comillas simples

Encerrar caracteres en comillas simples (''') mantiene el valor literal de cualquier carcter situado entre las comillas. Una comilla simple no puede aparecer encerrada entre comillas simples, incluso cuando es precedida por una barra invertida.3.1.2.3.- Comillas Dobles

Encerrar caracteres entre comillas dobles ('') mantiene el valor literal de todos los caracteres dentro de las comillas, con la excepcin de '$', ''', '\' y, cuando la expansin de la historia est habilitada, '!'. Los caracteres '$' y ''' mantienen su significado especial dentro de comillas dobles (Vea la Seccin 3.5 [Expansiones de Shell]). La barra invertida mantiene su significado especial slo cuando es seguida por uno de los siguientes caracteres: '$', ''', '\', o nueva linea. Dentro de comillas dobles, las barras invertidas que son seguidas por uno de estos caracteres son eliminadas. Las barras invertidas que preceden caracteres sin un significado especial permanecen como tales. Una comilla doble puede ser entrecomillada dentro de dobles comillas precedindola con una barra invertida. Si est habilitada la expansin de la historia de comandos esta se realizar a menos que el signo '!' que aparece entre las comillas dobles sea escapado usando una barra invertida. La barra invertida precediendo al '!' no es eliminada. Los parmetros especiales '*' y '@' tienen un significado especial cuando aparecen encerrados entre comillas dobles (vea la seccin 3.5.3 [Expansin de parmetros de la Shell]).3.1.2.4.- Entrecomillado ANSI-C

Las palabras de la forma $'cadena' son tratadas de forma especial. La palabra se expande a cadena, con los caracteres escapados por barras invertidas reemplazados como se especifica por el estndar ANSI C. Las secuencias de escape con barra invertida, si estn presentes, son decodificadas comoPgina 14

Capitulo 3: Caractersticas Bsicas del Shell

sigue: \a \b \e \E \f \n \r \t \v \\ \' \ \nnn \xHH \cx un carcter de escape (no ANSI C) carcter de alimentacin de lnea (form feed) carcter de nueva lnea carcter de retorno de carro tabulador horizontal tabulador vertical carcter barra invertida carcter comilla simple carcter comilla doble el carcter de 8 bits cuyo valor es el nmero octal nnn (de uno a tres dgitos). el carcter de 8 bits cuyo valor es el nmero hexadecimal HH (uno o dos dgitos hexadecimales) un carcter control-x alerta(campana) retroceso (elimina el carcter anterior)

El resultado expandido se encuentra entrecomillado con comilla simple, como si el signo '$' no estuviese presente.3.1.2.5.- Traducciones Especficas de la Localizacin

Una cadena entrecomillada con comillas dobles precedida por un signo ('$') causar que la cadena sea traducida de acuerdo a la localizacin actual. Si la localizacin actual es C o POSIX, el signo dlar es ignorado. Si la cadena es traducida y reemplazada, el sustituto es entrecomillado con comillas dobles. Algunos sistemas usan el catlogo de mensajes seleccionado por la variable de shell LC_MESSAGES . Otros crean el nombre del catlogo de mensajes a partir del valor de la variable del shell TEXTDOMAIN , posiblemente aadiendo un sufijo o '.mo'. Si usa la variable TEXTDOMAIN , puede necesitar ajustar la variable TEXTDOMAINDIR a la localizacin de los archivos del catlogo de mensajes. Otros incluso usan ambas variables de la forma: TEXTDOMAINDIR/LC_MESSAGES/TEXTDOMAIN.mo.

3.1.3.- ComentariosEn no-interactiva, o en una shell interactiva en la que la opcin interactive_comments para el comando interno shopt est activada (vea la seccin 4.3.2 [ El Comando Interno Shopt]), una palabra comenzando con '#' provoca que la palabra y todos los caracteres que le siguen en esa lnea sean ignorados. Una shell interactiva sin la opcinPgina 15

una

shell

Capitulo 3: Caractersticas Bsicas del Shell

interactive_comments activada no permite comentarios. La opcin interactive_coments

est establecida por defecto en las shells interactivas. Vea la seccin 6.3 [Shells Interactiva], para una descripcin de qu hace una shell interactiva.

3.2.- Comandos de ShellUn comando de shell simple como echo a b c consiste en el propio comando seguido por argumentos separados por espacios. Comandos de shell ms complejos estn compuestos de comandos simples situados juntos de varias formas; en una tubera en la cual la salida de un comando se convierte en la entrada del segundo, en una construccin tipo bucle o condicional, o en algunas otras agrupaciones.

3.2.1.- Comandos simplesUn comando simple es el tipo de comando que se encuentra con ms frecuencia. Este es slo una secuencia de palabras separadas por blancos, terminada por uno de los operadores de control de la shell (vea el Captulo 2 [Definiciones]). La primera palabra generalmente especifica un comando para ser ejecutado, con el resto de las palabras como argumentos del comando. El estado de retorno (vea la Seccin 3.7.5 [Estado de salida]) de un comando simple es su estado de salida como viene especificado por la funcin POSIX 1003.1 waitpid, o 128+n si el comando fue terminado por la seal n.

3.2.2.- TuberasUna tubera es una secuencia de comandos simples separados por uno de los operadores de control '|' o '|&'. El formato de uso de una tubera es:[time [-p]] [!] comando1 [ [| o |&] comando2 ]

La salida de cada comando en la tubera es conectado a travs del cauce a la entrada del siguiente comando. Esto es, cada comando lee la salida del comando previo. Esta conexin se establece antes de realizar cualquier redireccin especificada por el comando. Si se usa '|&' la salida de error estndar del comando1 es conectada a la entrada estndar del comando2 a travs del cauce; es una forma corta para 2>&1. Esta redireccin implcita de la salida de error estndar se realiza despus de cualquier redireccin especificada en el comando. La palabra reservada time produce que se impriman estadsticas de tiempo para la tubera una vez que esta finaliza. Las estadsticas actualmente consisten en el tiempo transcurrido y tiempo de usuario y de sistema consumidos por la ejecucin del comando. La opcin '-p' cambia el formato de salida por el especificado por POSIX. La variable TIMEFORMAT puede ser ajustada a una cadena de formato que especifique como se debe mostrar la informacin de los tiempos. Vea la Seccin 5.2 [Variables de Bash] para obtener una descripcin de los formatos disponibles. El uso de time como palabra reservada permite el cronometrado de los comandos internos de la shell, las funciones de shell y las tuberas. Un comando externo time no podra hacer esto fcilmente. Si la tubera no se ejecuta de forma asncrona (vea la Seccin 3.2.3 [Listas]) la shell espera hasta que se completen todos los comandos de la tubera. Cada comando en una tubera se ejecuta en su propia subshell (vea la Seccin 3.7.3 [Entorno de Ejecucin de Comandos]). El estado de salida de una tubera es el estado de salida de el ltimoPgina 16

Capitulo 3: Caractersticas Bsicas del Shell

comando en la tubera, a menos que la opcin pipefail est activada (vea la Seccin 4.3.1 [El Comando Interno Set]) Si pipefail est activado, el estado de retorno de la tubera es el valor del ltimo comando (el ms a la derecha) en salir con un estado distinto de cero, o cero si todos los comandos salen satisfactoriamente. Si la palabra reservada '!' precede a la tubera, el estado de salida es la negacin lgica del estado de salida como se describi ms arriba. El shell espera hasta que todos los comandos en la tubera terminen antes de retornar un valor.

3.2.3.- Listas de ComandosUna lista es una secuencia de una o ms tuberas separadas por uno de los siguientes operadores: ';', '&', '&&', o '||', y opcionalmente terminada por uno de los siguientes: ';', '&', o una nueva lnea. De estos operadores de lista '&&' y '||' tienen igual precedencia, seguidos por ';' y '&', que tienen igual precedencia. Una secuencia de una o ms nuevas lneas pueden aparecer en una lista para delimitar comandos, esto equivale a un punto y coma. Si un comando termina con el operador de control '&' la shell ejecuta el comando de forma asncrona en una subshell. Esto es conocido como ejecutar el comando en segundo plano. La shell no espera a que el comando finalice, y el estado de retorno es 0 (verdadero). Cuando el control de tareas no est activado (vea el Captulo 7 [Control de Tareas]), la entrada estndar para los comandos asncronos, en ausencia de alguna redireccin explcita, es redirigida desde /dev/null. Los comandos separados por un ';' se ejecutan secuencialmente; la shell espera para que cada comando finalice turnndose con el siguiente. El estado de retorno es el estado de retorno del ltimo comando ejecutado. Las listas Y (AND) y O (OR) son secuencias de una o ms tuberas separadas por los operadores de control '&&' y '||' respectivamente. Las listas AND y OR son ejecutadas con asociatividad a la izquierda Una lista AND tiene la formacomando1 && comando2 comando2 se ejecuta s y slo s el comando1 retorna un estado de salida de cero.

Una lista OR tiene la formacomando1 || comando2 comando2 se ejecuta s y slo s, el comando1 retorna un valor de salida distinto de cero.

El estado de retorno de las listas AND y OR es el estado de salida del ltimo comando ejecutado en la lista.

3.2.4.- Comandos CompuestosLos comandos compuestos son las construcciones de programacin de la shell. Cada construccin comienza con una palabra reservada o un operador de control y termina con otra correspondiente palabra reservada u operador. Cualquier redireccin (vea la Seccin 3.6 [Redirecciones]) asociada con un comando compuesto se aplica a todos los comandos dentro de ese comando compuesto, a menos que sea sobreescrito explcitamente. Bash proporciona construcciones cclicas, comandos condicionales y mecanismos para agrupar comandos y ejecutarlos como una unidad.Pgina 17

Capitulo 3: Caractersticas Bsicas del Shell

3.2.4.1.- Construcciones Cclicas

Bash soporta las siguientes construcciones cclicas (en forma de bucle). Note que en cualquier lugar en el que aparezca un ';' en la descripcin de la sintaxis de un comando este puede ser reemplazado por una o ms nuevas lneas.until

La sintaxis del comando until es:until comandos-test; do comandos-consiguientes; done Ejecuta los comandos-consiguientes mientras que los comandos-test tengan un estado de

salida distinto de cero. El estado de retorno es el estado de salida del ltimo comando ejecutado en comandos-consiguientes, o cero si no se ejecut ninguno.while

La sintaxis del comando while es:while comandos-test; do comandos-consiguientes; done Ejecuta los comandos-consiguientes mientas que los comandos-test tengan un estado de

salida igual a cero. El estado de retorno es el estado de salida del ltimo comando ejecutado en comandos-consiguientes, o cero si no se ejecut ninguno.for

La sintaxis del comando for es:for nombre [ [in [palabras ] ] ; ] do comandos; done

Expande las palabras y ejecuta los comandos uno por cada miembro en la lista resultante, con nombre asignado al miembro actual. Si 'in palabras' no est presente, el comando for ejecuta los comandos uno por cada parmetro posicional que se le pase, como si se hubiera especificado 'in $@' (vea la Seccin 3.4.2 [Parmetros Especiales]). El estado de retorno es el estado de salida del ltimo comando que ejecuta. Si no hay miembros en la expansin de palabras, no se ejecuta ningn comando y el estado de retorno es cero. Bash tambin soporta una forma alternativa para el comando for:for (( expr1 ; expr2 ; expr3 )) ; do comandos ; done Primero se evala la expresin aritmtica expr1 de acuerdo con las reglas descritas ms

abajo (vea la Seccin 6.5 [Aritmtica de la Shell]). A continuacin se evala repetidamente la expresin aritmtica expr2 hasta que su valor sea cero. Cada vez que expr2 se evala con un valor distinto de cero, se ejecutan los comandos y se evala la expresin expr3 .Si se omite alguna expresin se toma como si esta se evaluara a 1. El valor devuelto es el estado de salida del ltimo comando que se ejecuta en la lista, o false si alguna de las expresiones es invlida. Los comandos internos break y continue (vea la Seccin 4.1 [Comandos internos de la Shell Bourne]) pueden ser usados para controlar la ejecucin del bucle.3.2.4.2.- Construcciones Condicionalesif

La sintxis del comando if es:

Pgina 18

Capitulo 3: Caractersticas Bsicas del Shell

if comandos-test; then comandos-consiguientes [elif mas-comandos-test; then ms-siguientes;] [else alternativas-consiguientes; ] fi Se ejecuta la lista de comandos-test y si esta retorna un estado igual a cero se ejecuta la lista de comandos-consiguientes. Si los comandos-test retornan un estado distinto de cero, se ejecuta cada lista elif en turnos, y si su estado de salida es igual a cero, se ejecutan los correspondientes mas-consiguientes y el comando finaliza. Si la construccin 'else alternativas-consiguientes' est presente y el comando final en la ltima clausula if o elif tiene un estado de salida distinto de cero, entonces se ejecutan las alternativas-consiguientes. El estado de retorno es el estado de salida del ltimo comando ejecutado o cero si ninguna condicin fue evaluada como true.

case

La sintaxis del comando case es:case palabra in [ [(] patrn [| patrn] .) listacomandos ;;]... esac case ejecutar selectivamente la lista-comandos correspondiente al primer patrn que se ajusta con palabra. Si la opcin de shell nocasematch (vea la descripcin de shopt en

la Seccin 4.3.2 [El Comando Interno Shopt]) est activada, el ajuste se realiza sin diferenciar entre maysculas y minsculas para los caracteres alfabticos. El '|' se usa para separar patrones mltiples, y el operador ')' termina una lista de patrones. Una lista de patrones y su lista de comandos asociada se conoce como una clausula. Cada clausula debe terminar con ';;', ';&' o ';;&'. La palabra sufre expansin de tildes, expansin de parmetros, sustitucin de comandos, expansin aritmtica y eliminacin de entrecomillado antes de intentar el ajuste. Cada patrn sufre expansin del tildes, expansin de parmetros, sustitucin de comandos y expansin aritmtica. Puede haber un nmero arbitrario de clausulas case, cada una terminada con un ';;', ';&' o ';;&'. El primer patrn que ajusta determina la lista-comandos que ser ejecutada. Aqu hay un ejemplo usando case en un guin que se puede utilizar para describir una interesante caracterstica de un animal:echo -n "Introduzca el nombre de un animal: " read ANIMAL echo -n "El $ANIMAL tiene " case $ANIMAL in caballo | perro | gato) echo -n "cuatro";; hombre | canguro ) echo -n "dos";; *) echo -n "un nmero desconocido de";; esac echo " patas."

Si se utiliza el operador ';;' no se intenta ningn ajuste adicional tras el primer patrn encontrado. Usar ';&' en vez de ';;' produce que la ejecucin contine con la lista- comandos asociada con la siguiente clausula, si hay alguna. Usar ';;&' en vez dePgina 19

Capitulo 3: Caractersticas Bsicas del Shell

';;' produce que la shell pruebe a ajustar los patrones en la siguiente clausula, si hay alguna, y ejecuta cualquier lista-comandos asociada a los ajustes conseguidos. El estado de retorno es cero si no se ajusta a ningn patrn. De otro modo, el estado de retorno es la salida del estado de la lista-comandos ejecutada.select

La construccin select permite generar mens fcilmente. Esta tiene casi la misma sintaxis que el comando for:select nombre [ in palabras ]; do comandos; done Se expande la lista de palabras que siguen a in, generando una lista de items. El juego

de palabras expandidas se imprime en el flujo de la salida de error estndar, cada una precedida por un nmero. Si se omite la construccin 'in palabras' se imprimen los parmetros posicionales, como si se hubiese especificado 'in $@'. A continuacin se muestra el prompt PS3 y se lee una lnea desde la entrada estndar. Si la linea consiste en un nmero correspondiente a una de las palabras mostradas, entonces el valor de nombre es ajustado a esa palabra. Si la linea est vaca, las palabras y el prompt se muestran de nuevo. Si se lee EOF (fin de fichero), el comando select finaliza. Cualquier otro valor ledo produce que nombre se establezca a null. La linea leda es salvada en la variable REPLY. Los comandos son ejecutados despus de cada seleccin hasta que se ejecuta un comando break, punto en el que el comando select finaliza. A continuacin tenemos un ejemplo que permite al usuario elegir un nombre de fichero del directorio actual y mostrar el nombre y el ndice del archivo seleccionado:select fname in *; do echo usted seleccion $fname \($REPLY\) break; done

(( )) (( expresin ))

La expresin aritmtica se evala de acuerdo a las reglas descritas ms abajo (vea la seccin 6.5 [Aritmtica del Shell]). Si el valor de la expresin es distinta de cero, el estado de retorno es 0; de otro modo el estado de retorno es 1. Esto es exactamente equivalente alet expresin

Vea la Seccin 4.2 [Comandos Internos de Bash] para una descripcin completa del comando interno let.[[ ]] [[ expresin ]]

Devuelve un estado de 0 1 dependiendo de la evaluacin de la expresin condicional expresin. Las expresiones se componen de expresiones fundamentales descritas ms abajo en la Seccin 6.4 [Expresiones Condicionales de Bash]. La divisin de palabras y la expansin de nombres de archivo no se realiza en las palabras encerradas entre '[[' yPgina 20

Capitulo 3: Caractersticas Bsicas del Shell

']]'; se realizan la expansin de tildes, la expansin de parmetros y variables, la expansin aritmtica, la sustitucin de comandos, la sustitucin de procesos y la eliminacin del entrecomillado. Los operadores condicionales como '-f' deben ser desentrecomillados para que sean reconocidos como primarios. Cuando se usan con '[[', los operadores '' ordenan lexicogrficamente usando la localizacin actual. Cuando se usan los operadores '==' y '!=' la cadena a la derecha del operador se considera como un patrn y ajusta conforme a las reglas descritas ms abajo, en la Seccin 3.5.8.1 [Ajuste a Patrones]. Si la opcin de shell nocasematch (vea la descripcin de shopt en la Seccin 4.3.2 [El Comando Interno Shopt]) est activada, el ajuste se realiza sin diferenciar entre minsculas y maysculas en el caso de caracteres alfabticos. El valor devuelto es 0 si las cadenas ajustan ('==') o no ajustan ('!=') al patrn, y 1 de otro modo. Cualquier parte del patrn puede ser entrecomillada para forzar a que sea ajustada como una cadena. Hay un operador binario adicional '=~ ', con la misma precedencia que '==' y '!=' . Cuando se utiliza este la cadena a la derecha del operador es considerada como una expresin regular extendida y ajustada en consecuencia (como en regex3). El valor devuelto es 0 si la cadena ajusta al patrn, y 1 en otro caso. Si la expresin regular es incorrecta sintcticamente el valor devuelto de la expresin condicional es 2. Si la opcin de la shell nocasematch (vea la descripcin de shopt en la Seccin 4.3.2 [El Comando Interno Shopt]) est activada, el ajuste se realiza sin diferenciar entre maysculas y minsculas para los caracteres alfabticos. Cualquier parte del patrn puede ser entrecomillado para forzar a que este ajuste como una cadena. Las subcadenas ajustadas por subexpresiones parentizadas dentro de la expresin regular son guardadas en la variable de tipo array BASH_REMATCH. Los elementos de BASH_REMATCH con ndice 0 ser la porcin de la cadena que ajusta con la expresin regular completa. El elemento de BASH_REMATCH con el ndice n es la porcin de la cadena que encaja con la n-sima subexpresin parentizada. Las expresiones se pueden combinar usando los siguientes operadores, listados en orden de precedencia decreciente:( expresin )

Devuelve el valor de expresin. Este se puede utilizar para sobrescribir la precedencia normal de los operadores.! expresin

Devuelve true si la expresin es falseexpresin1 && expresin2 Devuelve true si tanto expresin1 como expresin2 son true. expresin1 || expresin2 Devuelve true si expresin1 o expresin2 son true.

Los operadores && y || no evalan expresin2 si el valor de expresin1 es suficiente para determinar el valor devuelto por la expresin condicional completa.

Pgina 21

Capitulo 3: Caractersticas Bsicas del Shell

3.2.4.3.- Agrupando Comandos

Bash proporciona dos maneras de agrupar una lista de comandos para ser ejecutada como una unidad. Cuando los comandos se agrupan, las redirecciones pueden ser aplicadas a la lista de comandos completa. Por ejemplo, la salida de todos los comandos en la lista puede ser redirigida a un nico flujo. ()( lista )

Encerrar una lista de comandos entre parntesis produce que se cree un entorno de subshell (vea la Seccin 3.7.3 [Entorno de Ejecucin de Comandos]), y cada uno de los comandos en lista ser ejecutado en ese subshell. Puesto que la lista se ejecuta en una subshell, el efecto de la asignacin de variables no permanece tras la finalizacin de la subshell. {}{ lista; }

Encerrar una lista de comandos entre llaves produce que lista sea ejecutada en el contexto de shell actual. No se crea ningn subshell. El punto y coma (o nueva lnea) que sigue a lista es obligatorio. A parte de la creacin de la subshell hay una sutil diferencia entre el uso de estas dos construcciones debido a razones histricas. Las llaves son palabras reservadas, as que deben ser separadas de la lista de comandos por blancos u otros metacaracteres de shell. Los parntesis son operadores, y son reconocidos como tokens separados por la shell incluso si no estn separados de la lista de comandos por espacios en blanco. El estado de salida de ambas construcciones es el estado de salida de la lista de comandos.

3.2.5.- CoprocesosUn coproceso es un comando de shell precedido por la palabra reservada coproc. Un coproceso se ejecuta asncronamente en un subshell, como si el comando hubiese terminado con el operador de control '&', con un cauce de dos sentidos establecido entre el shell en ejecucin y el coproceso. El formato de ejecucin de un coproceso es:coproc [NOMBRE] comando [redirecciones]

Esto crea un coproceso llamado NOMBRE. Si no se proporciona NOMBRE, el nombre por defecto es COPROC. No se debe proporcionar NOMBRE si el comando es un comando simple (vea la Seccin 3.2.1 [Comandos Simples]); de otro modo, se interpretar este como la primera palabra del comando simple. Cuando se ejecuta el coproceso, la shell crea una variable de tipo array (vea la Seccin 6.7 [Arrays]), llamada NOMBRE en el contexto de la shell en ejecucin. La salida estndar del comando se conecta a travs de un cauce a un descriptor de fichero en la shell en ejecucin, y este descriptor de fichero se asigna a NOMBRE[0] . La entrada estndar del comando se conecta a travs de un cauce a un descriptor de fichero en la shell en ejecucin, y ese descriptor de fichero se asigna a NOMBRE[1] . Este cauce es establecido antes de cualquier redireccin especificada por el comando (vea la Seccin 3.6 [Redirecciones]). El descriptor de fichero se puede utilizar como argumento para los comandos de shell y las redirecciones usando expansiones de palabra estndar.Pgina 22

Capitulo 3: Caractersticas Bsicas del Shell

El identificador de proceso de la shell engendrada para ejecutar el coproceso est disponible en el valor de la variable NAME_PID . Se puede utilizar el comando interno wait para esperar hasta que el coproceso termine. El valor devuelto por un coproceso es el estado de salida del comando.

3.3.- Funciones de ShellLas funciones de shell son una manera de agrupar comandos para ejecutarlos ms tarde usando un nico nombre para todo el grupo. Estas se ejecutan justo igual que un comando regular. Cuando se utiliza el nombre de una funcin de shell como un simple nombre de comando, se ejecuta la lista de comandos asociados con ese nombre de funcin. Las funciones de shell son ejecutadas en el contexto actual de la shell; no se crea ningn nuevo proceso para interpretarlas. Las funciones se declaran usando la siguiente sintaxis:[ function ] nombre () comando-compuesto [ redirecciones ]

Esto define una funcin de shell llamada nombre. La palabra reservada function es opcional. Si se suministra la palabra reservada function, los parntesis son opcionales. El cuerpo de la funcin es el comando compuesto comando-compuesto (vea la Seccin 3.2.4 [Comandos Compuestos]). Este comando es normalmente una lista encerrada entre { y }, pero puede ser cualquier comando compuesto listado ms arriba. El comando-compuesto se ejecuta en cualquier lugar donde se especifique nombre como nombre de un comando. Cualquier redireccin (vea la Seccin 3.6 [Redirecciones]) asociada con la funcin de shell se lleva a cabo cuando se ejecuta la funcin. Una definicin de funcin se puede eliminar usando la opcin '-f' con el comando interno unset (vea la Seccin 4.1 [Comandos Internos de la Shell Bourne]). El estado de salida de una definicin de funcin es cero a menos que ocurra un error de sintaxis o que previamente exista una funcin de slo lectura con el mismo nombre. Cuando se ejecuta la funcin, el estado de salida de esta es el estado de salida del ltimo comando ejecutado en el cuerpo de su definicin. Advierta que por razones histricas, en su uso ms comn las llaves que rodean el cuerpo de la funcin deben estar separadas del cuerpo mediante caracteres blancos o nuevas lineas. Este es debido a que las llaves son palabras reservadas y son slo reconocidas como tales cuando estn separadas de la lista de comandos por espacios en blanco o cualquier otro metacaracter de shell. Tambin, cuando usamos llaves, la lista de comandos debe terminar en un punto y coma, un '&', o una nueva lnea. Cuando se ejecuta una funcin, los argumentos pasados a la funcin se convierten en parmetros posicionales durante su ejecucin (vea la Seccin 3.4.1 [Parmetros Posicionales]). El parmetro especial '#' que se expande al nmero de parmetros posicionales, es actualizado para reflejar el cambio. El parmetro especial 0 permanece sin cambios. El primer elemento de la variable FUNCNAME se asigna al nombre de la funcin mientras que la funcin est en ejecucin. Todos los dems aspectos del entorno de ejecucin de la shell son los mismos para la funcin y su llamador con estas excepciones: las trampas DEBUG y RETURN no son heredades a menos que se le haya dado a la funcin el atributo trace usando el comando interno declare o se haya activado la opcin '-o functrace' con el comando interno set (en cuyo caso todas las funciones heredan las trampas DEBUG y RETURN), y la trampa ERR no es heredada a menos que la opcin de shell 'Pgina 23

Capitulo 3: Caractersticas Bsicas del Shell

o errtrace' haya sido activada. Vea la Seccin 4.1 [Comandos Internos de la Shell Bourne], para una descripcin del comando interno trap. Si se ejecuta el comando interno return en una funcin, la funcin termina y la ejecucin

continua con el siguiente comando despus de la llamada a la funcin. Cuando una funcin termina, los valores de los parmetros posicionales y el parmetro especial '#' son restaurados a los valores que tenan antes de la ejecucin de la funcin. Si se proporciona a return un argumento numrico, este es el estado devuelto por la funcin; de otro modo el estado devuelto por la funcin es el estado de salida del ltimo comando ejecutado antes del return; Se pueden declarar variables locales a la funcin utilizando el comando interno local. Estas variables son visibles slo para la funcin y los comandos que esta invoca. Los nombres de funcin y sus definiciones pueden ser listadas con la opcin '-f' de los comandos internos declare o typeset (vea la Seccin 4.2 [Comandos Internos de Bash]). La opcin '-F' de los comandos internos declare o typeset listar nicamente los nombres de las funciones (y opcionalmente el archivo fuente y el nmero de lnea, si la opcin de shell extdebug est activada). Las funciones pueden ser exportadas con la opcin '-f' del comando interno export (vea la Seccin 4.1 [Comandos Internos de la Shell]), de forma que los subshells las tengan definidas automticamente. Advierta que tener funciones y variables de shell con el mismo nombre puede llevar a tener mltiples entradas con el mismo nombre en el entorno pasado a las shells hijas. Debe tenerse especial cuidado en aquellos casos donde esto puede causar problemas. Las funciones pueden ser recursivas. No existe lmite en el nmero de llamadas recursivas posibles.

3.4.- Parmetros de ShellUn parmetro es una entidad que almacena valores. Este puede ser un nombre, un nmero o uno de los caracteres especiales listados ms abajo. Una variable es un parmetro identificado por un nombre. Una variable tiene un valor y cero o ms atributos. Los atributos son asignados usando el comando interno declare. (vea la descripcin del comando interno declare en la Seccin 4.2 [Comandos Internos de Bash]). Un parmetro est establecido si le ha sido asignado un valor. La cadena nula es un valor vlido. Una vez que una variable est establecida puede ser eliminada nicamente usando el comando interno unset. Una variable puede ser asignada mediante una sentencia de la forma:nombre=[valor]

Si no se da el valor, se asigna a la variable la cadena nula. Todos los valores sufren expansin de tilde, expansin de parmetros y variables, sustitucin de comandos, expansin aritmtica y eliminacin de entrecomillado (detallado ms abajo). Si la variable tiene establecido su atributo integer, entonces su valor se evala como una expresin aritmtica incluso si no se ha usado la expansin $(( )) (vea la Seccin 3.5.5 [Expansin Aritmtica]. La divisin de palabras no se realiza, con la excepcin de $@ como se explica ms abajo. No se realiza la expansin de nombres de fichero. Las sentencias de asignacin pueden aparecer tambin como argumentos en los comandos internos alias, declare, typeset, export, readonly y local. En el contexto donde una sentencia de asignacin est asignando un valor a una variable de la shell o un ndice de un array (vea la Seccin 6.7 [Arrays]), el operador '+=' se puede utilizar paraPgina 24

Capitulo 3: Caractersticas Bsicas del Shell

agregar o aadir el valor dado al valor previo de la variable. Cuando se aplica el operador '+=' a una variable para la cual se ha establecido el atributo integer (entero), el valor se evala como una expresin aritmtica y se aade al valor actual de la variable, la cual tambin se evala. Cuando se aplica el operador '+=' a una variable de tipo array usando una asignacin compuesta (vea la Seccin 6.7 [Arrays]), el valor de la variable no es eliminado (como s lo es cuando se usa '='), y se agregan nuevos valores al array comenzando por el inmediatamente mayor al mximo ndice del array (para arrays indexados), o aadido como pares llave-valor adicionales en un array asociativo. Cuando se aplica sobre una variable de tipo cadena, el valor se expande y se agrega al valor de la variable.

3.4.1.- Parmetros posicionalesUn parmetro posicional es un parmetro denotado por uno o ms dgitos, distintos al dgito 0. Los parmetros posicionales se asignan desde los argumentos de la shell cuando esta es invocada, y pueden ser reasignados usando el comando interno set. El parmetro posicional N puede ser referenciado como ${N}, o como $N cuando N consiste en un nico dgito. Los parmetros posicionales no pueden ser asignados con sentencias de asignacin. Se utilizan los comandos internos set y shift para establecer y eliminar estos parmetros (vea el Captulo 4 [Comandos Internos de la Shell]). Los parmetros posicionales son reemplazados temporalmente cuando se ejecuta una funcin de shell (vea la Seccin 3.3 [Funciones de la Shell]). Cuando se expande un parmetro posicional consistente en ms de un nico dgito, este debe ser encerrado entre llaves.

3.4.2.- Parmetros EspecialesLa shell trata a varios parmetros de forma especial. Estos parmetros nicamente pueden ser referenciados; la asignacin a ellos no est permitida.*

Se expande a los parmetros posicionales, comenzando por el uno. Cuando la expansin ocurre entre dobles comillas se expande a una nica palabra con el valor de cada uno de los parmetros separados por el primer carcter de la variable especial IFS . Esto es, $* es equivalente a $1c$2c... , donde c es el primer carcter del valor de la variable IFS. Si la variable IFS no est establecida, los parmetros se separan con espacios. Si IFS es nulo, los parmetros se unen sin utilizar ningn tipo de separador. Se expande a los parmetros posicionales, empezando por el uno. Cuando la expansin ocurre entre comillas dobles cada parmetro es expandido a una palabra separada del resto. Esto es, $@ es equivalente a $1 $2 .Si la expansin con comillas dobles ocurre dentro de una palabra, la expansin del primer parmetro se une con la parte inicial de la palabra original, y la expansin del ltimo parmetro se une con la ltima parte de la palabra original. Cuando no hay parmetros posicionales $@ y $@ se expanden a nada (es decir, son eliminados). Se expande al nmero de parmetros posicionales en el sistema decimal Se expande al estado de salida de la tubera ejecutada en primer plano ms recientemente.

@

# ?

Pgina 25

Capitulo 3: Caractersticas Bsicas del Shell

-

(Un guin). Se expande a las banderas de opcin actuales como se especific en la invocacin, mediante el comando interno set, o aquellas especificadas por la propia shell (como la opcin '-i'). Se expande al id de proceso de la shell. En una subshell dada por ( ), esta variable se expande a la id del proceso de la shell padre, no de la subshell. Se expande al id del proceso del comando ejecutado en segundo plano ms recientemente (de forma asncrona). Se expande al nombre de la shell o del guin de shell. Este se establece en el inicio de la shell. Si Bash es invocado con un archivo de comandos (vea la Seccin 3.8 [Guiones de Shell]), $0 se asigna al nombre de ese archivo. Si Bash se inicia con la opcin '-c' (vea la Seccin 6.1 [Invocando a Bash]), entonces $0 se asigna al primer argumento tras la cadena a ser ejecutada, si hay alguna presente. De otro modo, se asigna al nombre de archivo usado para invocar Bash, dado por el argumento cero. (Un carcter de subrayado). Al inicio de la shell, contiene la ruta absoluta usada para invocar la shell o el guin de shell que est siendo ejecutado tal cmo se pas en el entorno o en la lista de argumentos. Posteriormente, expande al ltimo argumento del comando previo, tras la expansin. Tambin contiene la ruta completa usada para invocar cada comando ejecutado y situado en el entorno que se ha exportado para ese comando. Cuando comprobamos el correo, este parmetro mantiene el nombre del archivo de correo.

$ ! 0

_

3.5.- Expansiones de la shellLa expansin se realiza en la lnea de comandos despus de que esta haya sido dividida en tokens. Se realizan siete tipos de expansiones: expansin de llaves expansin de tildes expansin de parmetros y variables sustitucin de comandos expansin aritmtica divisin de palabras expansin de nombres de archivo. El orden de las expansiones es: expansin de llaves, expansin de tildes, expansin de parmetros y variables, expansin aritmtica y sustitucin de comandos (realizada de izquierda a derecha), divisin de palabras y expansin de nombres de archivo. En sistemas que lo soporten hay disponible un tipo adicional de expansin: la sustitucin de procesos. Esta se realiza al mismo tiempo que la expansin de parmetros y variables, la expansin aritmtica y la sustitucin de comandos. Slo la expansin de llaves, la divisin de palabras y la expansin de nombres de fichero pueden cambiar el nmero de palabras de la expansin; otras expansiones expanden de palabra a palabra. La nica excepcin a esto son las expansiones de $@ (vea la Seccin 3.4.2 [Parmetros Especiales]) y ${nombre[@]} (vea la Seccin 6.7 [Array])Pgina 26

Capitulo 3: Caractersticas Bsicas del Shell

Despus de realizar todas las expansiones se realiza la eliminacin del entrecomillado (vea la Seccin 3.5.9 [Eliminacin del Entrecomillado]).

3.5.1.- Expansin de LlavesLa expansin de llaves es un mecanismo por el cual se pueden generar cadenas arbitrarias. Este mecanismo es similar a la expansin de nombres de fichero (vea la Seccin 3.5.8 [Expansin de Nombres de Fichero]), pero los nombres de archivo generados no existen. Los patrones para la expansin de llaves tienen la forma de un prembulo opcional, seguido por o bien una serie de cadenas separadas por comas o bien una expresin secuencia encerrada entre llaves, seguido por un eplogo opcional. El prembulo se usa como prefijo para cada una de las cadenas contenidas entre las llaves, y el eplogo se aade al final de cada cadena resultante, expandiendo de derecha a izquierda. Las expansiones de llaves pueden ser anidadas. No se ordena el resultado de cada cadena expandida; se mantiene el orden de izquierda a derecha. Por ejemplo:bash$ echo a{d,c,b}e ade ace abe

Una expresin secuencia tiene la forma {x..y[..incr]}, donde x e y son enteros o caracteres nicos, e incr, es un incremento opcional, dado como un valor entero. Cuando se suministran enteros, la expresin expande a cada nmero entre x e y, ambos inclusive. Los enteros suministrados pueden ir precedidos de '0' para forzar a que cada trmino tenga la misma longitud. Cuando x o y comienzan con un cero, la shell intenta forzar a todos los trminos generados a contener el mismo nmero de dgitos, aadiendo ceros a la izquierda cuando sea necesario. Cuando se suministran caracteres, la expresin se expande lexicogrficamente a cada carcter entre x e y, ambos inclusive. Advierta que tanto x como y deben ser del mismo tipo. Cuando se utiliza el incremento este se usa como la diferencia entre cada uno de los trminos. El incremento por defecto es 1 o -1 segn corresponda. La expansin de llaves se realiza antes de cualquier otra expansin, y cualquier carcter especial para otras expansiones se mantiene en el resultado. Esto es estrictamente textual. Bash no aplica ninguna interpretacin sintctica al contexto de la expansin o al texto entre los corchetes. Para evitar conflictos con la expansin de parmetros, la cadena '${' no se considera apta para la expansin de llaves. Una expansin de llaves formada correctamente debe contener las llaves de apertura y de cierre sin entrecomillar, y al menos una coma o una expresin secuencia sin entrecomillar en ambos casos. Cualquier expansin de llaves formada incorrectamente permanecer sin cambios. Un '{' o una ',' pueden ser entrecomilladas con una barra invertida para prevenir que sea considerada como parte de una expresin de llaves. Esta construccin es frecuentemente usada como una abreviatura cuando el prefijo comn de la cadena a generar es mayor que en el ejemplo siguiente:mkdir /usr/local/src/bash/{old,new,dist,bugs}

o

Pgina 27

Capitulo 3: Caractersticas Bsicas del Shell

chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

3.5.2.- Expansin de TildesSi una palabra comienza con un carcter tilde ('~ ') sin entrecomillar todos los caracteres anteriores a la primera barra no entrecomillada (o todos los caracteres si no hay barras sin entrecomillar) son considerados como un prefijo-tilde. Si ninguno de los caracteres en el prefijo-tilde estn entrecomillados, los caracteres en el prefijo-tilde que siguen a la tilde son tratados como un posible nombre de inicio de sesin. Si este nombre de inicio de sesin es la cadena nula, la tilde es reemplazada por el valor de la variable de shell HOME . Si HOME no est establecida, en su lugar se utiliza el directorio home del usuario que est ejecutando la shell. De otro modo, el prefijo-tilde es reemplazado con el directorio home asociado con el nombre de inicio de sesin especificado. Si el prefijo-tilde es '~+', el valor de la variable PWD reemplaza al prefijo-tilde. Si el prefijotilde es '~-' se sustituye por el valor de la variable OLDPWD, si esta est establecida. Si los caracteres que siguen a la tilde en el prefijo-tilde consisten en un nmero N, opcionalmente precedido por '+' o '-', el prefijo-tilde se sustituye por el correspondiente elemento de la pila de directorios, como si fuera mostrado por el comando interno dirs invocado con los caracteres que siguen al prefijo-tilde como argumento (vea la Seccin 6.8 [La Pila de Directorios]). Si el prefijotilde, sin la tilde, consiste en un nmero sin que vaya acompaado de '+' o '-', se asume que va acompaado del signo '+'. Si el nombre de inicio de sesin es invlido, o la expansin de tilde falla, la palabra se mantiene sin cambios. Cada asignacin de variables se comprueba inmediatamente en busca de prefijos-tilde sin entrecomillar siguiendo al ':' o al primer '='. En estos casos, la expansin tilde es inmediata. Por consiguiente, uno pude usar los nombres de fichero con tildes en asignaciones a PATH, MAILPATH y CDPATH, y la shell asigna el valor expandido. La siguiente tabla muestra como Bash trata los prefijos-tilde sin entrecomillar:~ ~/foo ~fred/foo ~+foo ~-/foo ~N ~+N ~-N

El valor de $HOME '$HOME/foo' El subdirectorio foo del directorio home del usuario fred '$PWD/foo' '${OLDPWD-'~-'}/foo' La cadena que sera mostrada por 'dirs +N' La cadena que sera mostrada por 'dirs +N' La cadena que sera mostrada por 'dirs +N'

3.5.3.- Expansin de Parmetros de ShellEl carcter '$' inicia la expansin de parmetros, la sustitucin de comandos o la expansin aritmtica. El nombre del parmetro o el smbolo a expandir puede ser encerrado entre llaves, lo que es opcional, pero sirve para proteger la variable a ser expandida de que los caracteres inmediatamentePgina 28

Capitulo 3: Caractersticas Bsicas del Shell

siguientes a ella puedan ser interpretados como parte del nombre. Cuando se usan las llaves, la llave de cierre que se utiliza es la primera '}' no escapada mediante una barra invertida o encerrada en una cadena entrecomillada, y no encerrada en una expansin aritmtica, sustitucin de comandos o expansin de parmetros embebidas. La forma bsica de la expansin de parmetros es ${parmetro} . Se sustituye el valor de parmetro. Las llaves son obligatorias cuando el parmetro es un parmetro posicional con ms de un dgito o cuando el parmetro es seguido por un carcter que no debe ser interpretado como parte de su nombre. Si el primer carcter del parmetro es una exclamacin de cierre (!), se realiza una indireccin de variables de un nivel. Bash utiliza el valor de la variable formada con el resto del parmetro como el nombre de la variable; esta variable entonces se expande y ese valor se utiliza en el resto de la sustitucin, en vez del valor del parmetro por s mismo. Esto se conoce como expansin indirecta. Las excepciones a esto son las expansiones ${!prefijo*} y ${!nombre[@]} descritas ms abajo. La exclamacin de cierre debe ir inmediatamente a continuacin de la llave izquierda para que indique la indireccin. En todos los casos que se dan ms abajo, palabra se somete a expansin de tildes, expansin de parmetros, sustitucin de comandos y expansin aritmtica. Cuando no se realiza la expansin de subcadenas, usando la forma descrita ms abajo, Bash analiza en busca de un parmetro que no est establecido o sea nulo. Omitir el dos puntos resulta en que el chequeo se realiza slo en busca de un parmetro que no est establecido. Dicho de otro modo, si se incluye el dos puntos, el operador chequea tanto la existencia del parmetro como que su valor no sea nulo; si el dos puntos se omite, el operador chequea nicamente la existencia.${parmetro:-palabra}

Si el parmetro no est establecido o es nulo, se sustituye por la expansin de palabra. De otro modo, se sustituye por el valor de parmetro.${parmetro:=palabra}

Si el parmetro no est establecido o es nulo se asigna a parmetro la expansin de palabra. Luego se sustituye por el valor de parmetro. Los parmetros posicionales y los parmetros especiales no pueden ser asignados de este modo.${parmetro:?palabra}

Si el parmetro es nulo o no est establecido, se escribe en la salida de error estndar la expansin de palabra (o un mensaje a tal efecto si palabra no est presente) y la shell, si no es interactiva, termina. De otro modo, se sustituye por el valor de parmetro.${parmetro:+palabra}

Si el parmetro es nulo o no est establecido, no realiza ninguna sustitucin, de otro modo se sustituye por la expansin de palabra${parmetro:desplazamiento} ${parmetro:desplazamiento:longitud}

Expande hasta longitud caracteres del parmetro comenzando por el carcter especificado por desplazamiento. Si se omite longitud, expande a la subcadena de parmetroPgina 29

Capitulo 3: Caractersticas Bsicas del Shell

que comienza en el carcter especificado por desplazamiento. longitud y desplazamiento son expresiones aritmticas (vea la Seccin 6.5 [Aritmtica de la Shell]). Esto es conocido como Expansin de Subcadenas.longitud debe evaluarse a un nmero mayor o igual que cero. Si el desplazamiento se evala como un nmero menor que cero, entonces el valor del desplazamiento se cuenta desde el final del valor de parmetro. Si el parmetro es '@', el resultado es longitud parmetros posicionales comenzando en desplazamiento. Si el parmetro es el nombre de un array indexado seguido por '@' o '*', el resultado es de longitud miembros del array comenzando con ${parmetro[desplazamiento]} . Un desplazamiento negativo se toma

como relativo al ndice inmediatamente superior al mayor ndice del array especificado. La expansin de subcadenas aplicada a un array asociativo produce resultados no definidos.${!prefijo*} ${!prefijo@}

Expande a nombres de variables cuyos nombres comiencen con prefijo, separados por el primer carcter de la variable especial IFS . Cuando se usa '@' y la expansin aparece encerrada entre dobles comillas, cada nombre de variable se expande a una palabra separada del resto.${!nombre[@]} ${!nombre[*]}

Si nombre es una variable de tipo array, expande a la lista de ndices del array (claves) asignada en nombre. Si nombre no es un array, expande a 0 si nombre est establecido y a nulo en caso contrario. Cuando se usa '@' y la expansin aparece encerrada entre comillas dobles, cada clave se expande en una palabra separada.${#parmetro}

Se sustituye por la longitud en caracteres del valor expandido de parmetro. Si el parmetro es '*' o '@', el valor sustituido es el nmero de parmetros posicionales. Si parmetro es un nombre de array seguido de '* ' o '@', el valor sustituido es el nmero de elementos del array.${parmetro#palabra} ${parmetro##palabra}

La palabra se expande para producir un patrn al igual que en la expansin de nombres de fichero (vea la Seccin 3.5.8 [Expansin de Nombres de Fichero]). Si el patrn encaja con el principio del valor expandido de parmetro, entonces el resultado de la expansin es el valor expandido de parmetro en el que se elimina el ajuste ms corto al patrn (en el caso de usar '#') o el ajuste ms largo al patrn (en el caso de '##'). Si el parmetro es '@' o '*' la operacin de eliminacin del patrn se aplica a cada parmetro posicional sucesivamente, y la expansin es la lista resultante. Si el parmetro es una variable de tipo array indexada por '@' o '*' la operacin de eliminacin del patrn sePgina 30

Capitulo 3: Caractersticas Bsicas del Shell

aplica a cada miembro del array en turnos, y la expansin es la lista resultante.${parmetro%palabra} ${parmetro%%palabra}

La palabra es expandida para producir un patrn como en la expansin de nombres de fichero. Si el patrn encaja en una porcin final del valor expandido de parmetro, entonces el resultado de la expansin es el valor de parmetro con el ajuste ms corto que concuerde con el patrn (en el caso de '%') o el ajuste ms largo (en el caso de '%%') eliminados. Si el parmetro es '@' o '*' la operacin de eliminacin del patrn se aplica a cada parmetro posicional en turnos y la expansin es la lista resultante. Si el parmetro es una variable de tipo array indexada por '@' o '*', la operacin de eliminacin del patrn se aplica a cada miembro del array secuencialmente, y la expansin es la lista resultante.${parmetro/patrn/cadena} patrn se expande para producir un patrn como en la expansin de nombres de archivo. parmetro se expande y el ajuste ms largo al patrn de este valor es sustituido por cadena. Si el patrn comienza con '/', todos los ajustes al patrn son reemplazados por cadena. Normalmente slo se reemplaza el primer ajuste. Si el patrn comienza con '#', este debe encajar al principio del valor expandido de parmetro. Si el patrn comienza con '%' este debe ajustar al final del valor expandido de parmetro. Si la cadena es nula

los ajustes al patrn sern eliminados y se puede omitir la '/' posterior al patrn. Si el parmetro es '@' o '* ', la operacin de sustitucin se aplica a cada parmetro posicional por turnos, y la expansin es la lista resultante. Si parmetro es una variable de tipo array indexada con '@' o '*', la operacin de sustitucin se aplica a cada uno de los miembros del array en turnos, y la expansin es la lista resultante.${parmetro^patrn} ${parmetro^^patrn} ${parmetro,patrn} ${parmetro,,patrn}

Esta expansin modifica las maysculas-minsculas en los caracteres alfabticos de parmetro. patrn se expande para producir un patrn como en la expansin de nombres de fichero. El operador '^' convierte las letras minsculas que encajen con el patrn a letras maysculas; el operador ';' convierte las letras maysculas que ajusten con el patrn a letras minsculas. Las expansiones con '^^' y ',,' convierten cada carcter que encaje en el valor expandido; Las expansiones con '^' y ',' encajan y convierten nicamente el primer carcter en el valor expandido. Si se omite el patrn se considera que este es igual a '?', con el que encaja cualquier carcter. Si el parmetro es '@' o '*' las modificaciones de maysculas y minsculas se aplican a cada carcter posicional en turnos y la expansin es la lista resultante. Si parmetro es una variable de tipo array indexada con '@' o '*', las modificaciones se aplican a cada miembro del array en turnos,Pgina 31

Capitulo 3: Caractersticas Bsicas del Shell

y la expansin es la lista resultante.

3.5.4.- Sustitucin de Comandos.La sustitucin de comandos permite que la salida de un comando sustituya al propio comando. La sustitucin de comandos ocurre cuando un comando es encerrado de la siguiente manera:$(comando)

o`comando`

Bash realiza la expansin ejecutando el comando y reemplazando la sustitucin del comando con la salida estndar del comando, con cualquier carcter nueva lnea marginal eliminado. Las nuevas lneas embebidas en el interior no son eliminadas, pero pueden ser eliminadas durante la divisin de palabras. La sustitucin del comando $(cat archivo) puede ser reemplazada por su equivalente mucho ms rpido $(< archivo). Cuando se utiliza la forma antigua, encerrada entre tildes invertidas ('`'), las barras invertidas mantienen su significado literal excepto cuando van seguidas de '$', ''', o '\'. La primera tilde invertida no precedida por una barra invertida termina la sustitucin de comandos. Cuando se usa la forma $(comando), todos los caracteres entre los parntesis forman el comando; ninguno se trata de forma especial. La sustitucin de comandos puede ser anidada. Para anidar cuando se utiliza la forma antigua, se debe escapar las tildes inversas internas con barras invertidas. Si la sustitucin aparece entre dobles comillas, no se realiza la separacin de palabras y la expansin de nombres de ficheros en los resultados.

3.5.5.- Expansin AritmticaLa expansin aritmtica permite la evaluacin de una expresin aritmtica y la sustitucin del resultado. El formato para la expansin aritmtica es:$(( expresin ))

La expresin se trata como si estuviera encerrada entre dobles comillas, pero unas comillas dobles encerradas entre los parntesis no se tratan de forma especial. Todos los tokens en la expresin sufren expansin de parmetros, sustitucin de comandos y eliminacin del entrecomillado. La expansin aritmtica puede ser anidada. La evaluacin se realiza de acuerdo con las reglas listadas ms abajo (vea la Seccin 6.5 [Aritmtica de la Shell]). Si la expresin es invlida, Bash imprime un mensaje indicando el fallo en la salida de error estndar y no se produce ninguna sustitucin.

3.5.6.- Sustitucin de Procesos.La sustitucin de procesos est soportada en sistemas que permiten tuberas con nombre (FIFOs) o el mtodo de denominar los archivos abiertos con '/dev/fd'. Esta toma la forma:(lista)

La lista de procesos se ejecuta con su entrada o su salida conectada a un FIFO o a un archivoPgina 32

Capitulo 3: Caractersticas Bsicas del Shell

del tipo '/dev/fd'. El nombre de este archivo se pasa como argumento al comando actual como resultado de la expansin. Si se utiliza la forma >(lista) la escritura en el archivo proporcionar entrada para la lista. Si se utiliza la forma y el parntesis izquierdo, de otro modo la construccin se interpretar como una redireccin. Cuando est disponible, la sustitucin de procesos se realiza