Bash Script – Sustitución de comandos

Para comprender la sustitución de comandos, analicemos primero la sustitución en los scripts de shell. La sustitución es una funcionalidad mediante la cual podemos indicarle al shell que sustituya el valor real de una expresión. 

Ejemplo: 

En el siguiente programa, primero creamos la variable str y le asignamos el valor «GeeksforGeeks» y luego sustituimos el valor de la string str («GeeksforGeeks») en el comando echo.

//myStript.sh

#!/bin/sh
 
str='GeeksforGeeks'
echo -e "str: $str"

Producción:

Sustitución

Este artículo se centra en la técnica de sustitución de comandos utilizada en un script Bash.

Hay algunas secuencias de caracteres que no representan su verdadera naturaleza pero tienen un significado especial para el sistema operativo y estas secuencias se conocen como secuencias de escape. Cuando se usan en un comando, se reemplazan por valores reales.

Secuencias de escape Significado
 \norte nueva línea
\r retorno de carro
\t pestaña horizontal
\b retroceso
 \\ barra invertida

Sustitución de comandos 

La sustitución de comandos es un mecanismo que siguen los programadores en un script bash. En este mecanismo, la salida de un comando reemplaza al comando mismo. Bash opera la expansión ejecutando un comando y luego reemplazando la sustitución del comando con la salida estándar del comando. En palabras simples, la salida de un comando UNIX se empaqueta y luego se usa como un comando. 

Para entenderlo mejor, consideremos un ejemplo. El comando seq en Linux se usa para imprimir números de INICIO a FIN en pasos de INCREMENTO.

Sintaxis:

seq START INCREMENT END  

Tipo de devolución:

Imprime números de INICIO a FIN cada uno en la nueva línea por la diferencia de INCREMENTO.

Ejemplo:

En el siguiente script, estamos imprimiendo números del 2 al 20 con una diferencia de 2. En otras palabras, estamos imprimiendo números pares hasta el 20.

#!/bin/bash
# your code goes here
 
seq 2 2 20

Producción:

Sustitución de comandos 

Podemos usar la salida del comando anterior como un nuevo comando. Considere la siguiente secuencia de comandos,  

Ejemplo:

#!/bin/bash
# your code goes here
 
echo $(seq 2 2 20)

Producción:

Sustitución de comandos 

Expansión de variables y comandos

Durante el proceso de sustitución de comandos, la salida del comando se puede asignar a una variable, como cualquier otro valor.

Ejemplo:

En el siguiente script, hemos asignado el resultado del comando echo a ambas strings en las variables, «varaiable1» y «variable2», respectivamente. Luego hemos usado estas variables en el comando echo.

#!/bin/bash

variable1=$(echo 'Full form of gfg is' )
variable2=$(echo 'GeekforGeeks')
echo "$variable1 : $variable2"

Producción:

Expansión de variables y comandos

Pérdida de nuevas líneas en la sustitución de comandos

En el mecanismo de sustitución de comandos, si la salida de un comando que se está sustituyendo contiene saltos de línea finales, en ese caso los saltos de línea finales se eliminan después de la sustitución. Tenga en cuenta que las nuevas líneas incrustadas no se eliminan, pero pueden eliminarse durante la división de palabras.

Ejemplo:

En este script, estamos usando el comando seq. Ahora el comando seq imprime números en la consola y agrega un carácter de nueva línea después de que cada número se imprime en la consola.

#!/bin/bash
# your code goes here
 
seq 1 2 19

Producción:

Pérdida de nuevas líneas en la sustitución de comandos

Ejemplo:

En este script, hemos usado el resultado del comando anterior y lo hemos sustituido en el comando. Como puede ver en la salida, los números del 1 al 19 con la diferencia de 2 se imprimen en la consola. Pero esta vez todos están impresos en la misma línea sin ningún carácter de nueva línea.  

#!/bin/bash
# your code goes here
 
echo $(seq 1 2 19)

Producción:

Pérdida de nuevas líneas en la sustitución de comandos

Publicación traducida automáticamente

Artículo escrito por bhuwanesh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *