Lo que se conoce anteriormente como cubos es lo que llamamos variables en la mayoría de los lenguajes de programación. Además, se basa en el concepto básico de una variable, se introduce un concepto que llamamos tipificación.
La escritura es un nombre para el comportamiento esperado de almacenamiento y asignación de una variable. Entonces, ¿cómo se ve esto cuando volvemos a los cubos??
En el pequeño mundo de los cubos, hemos creado para nuestros programas, los cubos tienen nombres. Eso es todo.
Ahora suponga que nuestros programas no tienen el lujo de tener un número infinito de bolsas de Jetson a su disposición para usar como cubos. Antes de que se nombre un balde y se llene de su contenido, el programa debe decidir la forma y la constitución de cada cubo que toca. Sé que parece un poco exagerado, pero es un mal necesario. Todos los cubos están obligados por su tipo.
¿Cómo se ve esto cuando volvemos a Bash??
Funciones, matrices y cuerdas se almacenan en variables. Bash usa lo que llamamos atributos a los cambios de bandera en los comportamientos en la asignación. A pesar de que hay un sistema para modificar el comportamiento de la asignación variable, cuando todo se reduce a él, los valores se almacenan en variables como cadenas.
En Bash, un programa vive para poner cadenas en variables y nombrarlas para su uso posterior. Estas cadenas están disponibles para manipular a lo largo de la vida del programa. El programa vive para manipular cuerdas.
Aquí cubriremos la manipulación de cuerdas de Bash en la respiración y la mayor profundidad posible para ser accesibles para los lectores de todas las marcas y formas. Seguir leyendo.
¿Qué es la manipulación de la cadena en Bash?
La manipulación de la cadena es una operación en una cadena que cambia su contenido. En Bash, la manipulación de la cadena viene en dos formas: manipulación de cadenas de bash puro y manipulación de cadenas a través de comandos externos. Aquí tocaremos ambos tipos de manipulación de cadenas.
Supongamos que tenemos una variable en Bash que contiene una cadena, deseamos manipular la cadena llamada. En el caso de que exista más de una cadena, nombramos la cadena de cadenas, String2, ... también, podemos optar por nombrar una cadena algo más significativo que la cadena para promover la comprensión del contenido de la cadena y el uso previsto.
Concatenate Strings - Listado de cadenas en una cadena
En Bash, la manera fácil de concatenar cadenas es enumerar las cuerdas en orden. La cadena resultante es una nueva cadena que contiene todas las cadenas enumeradas.
$ String1 $ String2 ..
Ejemplo: Concatenación de cadena mediante listado de cadenas en cadena
String = "One";
string2 = "dos";
string3 = $ String $ String2;
echo $ string3
Producción
uno dos
Listado de cuerdas en una matriz
En Bash, otra forma de concatenar cadenas es enumerar las cadenas en una matriz y usar la expansión de los parámetros para expandir la matriz a la cadena concatenada. Sin embargo, a diferencia del ejemplo anterior, eliminar el espacio en blanco que separa los elementos de la matriz puede requerir trabajo adicional.
Array ($ Strings $ Strings2 ...)
Ejemplo: Concatenación de cadenas al enumerar cadenas en una matriz
cadenas = ("one" "dos");
echo $ cadenas [@]
Producción
uno dos
Acortar una cadena: cambie una cadena a la izquierda
Una forma de acortar una cadena es cambiar su contenido a la izquierda. El contenido de la cadena desplazado hacia la izquierda desaparece, lo que resulta en una cadena más corta.
Ejemplo: desplazar el bucle izquierdo
string = "abcdefghijklmnopqrstuvwxyz";
para i en $ (seq 0 $ (($ #string - 1)));
hacer
echo $ string: $ i;
hecho
Producción
ABCDEFGHIJKLMNOPQRSTU VWXYZ
bcdefghijklmnopqrstuvwxyz
CDEFGHIJKLMNOPQRSTUVWXYZ
defghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
fghijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
hijklmnopqrstuvwxyz
ijklmnopqrstuvwxyz
jklmnopqrstuvwxyz
klmnopqrstuvwxyz
lmnopqrstuvwxyz
mnopqrstuvwxyz
nopqrstuvwxyz
opqrstuvwxyz
pqrstuvwxyz
qrstuvwxyz
rstuvwxyz
stuvwxyz
tuvwxyz
uvwxyz
V W X Y Z
W x Y Z
xyz
yz
z
Cambiar una cadena hacia la derecha, obtener una subcadena de cadena
Otra forma de acortar una cadena en Bash es obtener la subcadena de una cadena. La operación resultante se puede utilizar para implementar una operación de cambio a la derecha similar al método anterior.
Ejemplo: desplazar el bucle derecho
string = "abcdefghijklmnopqrstuvwxyz";
para i en $ (seq 0 $ (($ #string - 1)));
hacer
echo $ string: 0: $ #string -i;
hecho
Producción
ABCDEFGHIJKLMNOPQRSTU VWXYZ
abcdefghijklmnopqrstuvwxy
abcdefghijklmnopqrstuvwx
abcdefghijklmnopqrstuvw
abcdefghijklmnopqrstuv
abcdefghijklmnopqrstu
abcdefghijklmnopqrst
abcdefghijklmnopqrs
abcdefghijklmnopqr
abcdefghijklmnopq
abcdefghijklmnop
abcdefghijklmno
abcdefghijklmn
abcdefghijklm
abcdefghijkl
abcdefghijk
abcdefghij
abcdefghi
abcdefgh
abcdefg
a B C D e F
a B C D e
a B C D
a B C
abundante
a
Ejemplo: Pyramid de bucle de cambio
Para diversión, combinemos los dos ejemplos de bucle de cambio anteriores para dibujar un paso en nuestro terminal.
Ejemplo: paso de bucle de cambio
string = "abcdefghijklmnopqrstuvwxyz";
para i en $ (seq 0 $ (($ #string - 1)));
hacer
echo $ string: 0: $ #string -i;
hecho
| tac;
para i en $ (seq 0 $ (($ #string - 1)));
hacer
echo $ string: $ i;
hecho
Producción
a
abundante
a B C
a B C D
a B C D e
a B C D e F
abcdefg
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
abcdefghijkl
abcdefghijklm
abcdefghijklmn
abcdefghijklmno
abcdefghijklmnop
abcdefghijklmnopq
abcdefghijklmnopqr
abcdefghijklmnopqrs
abcdefghijklmnopqrst
abcdefghijklmnopqrstu
abcdefghijklmnopqrstuv
abcdefghijklmnopqrstuvw
abcdefghijklmnopqrstuvwx
abcdefghijklmnopqrstuvwxy
ABCDEFGHIJKLMNOPQRSTU VWXYZ
ABCDEFGHIJKLMNOPQRSTU VWXYZ
bcdefghijklmnopqrstuvwxyz
CDEFGHIJKLMNOPQRSTUVWXYZ
defghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
fghijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
hijklmnopqrstuvwxyz
ijklmnopqrstuvwxyz
jklmnopqrstuvwxyz
klmnopqrstuvwxyz
lmnopqrstuvwxyz
mnopqrstuvwxyz
nopqrstuvwxyz
opqrstuvwxyz
pqrstuvwxyz
qrstuvwxyz
rstuvwxyz
stuvwxyz
tuvwxyz
uvwxyz
V W X Y Z
W x Y Z
xyz
yz
z
Capitalizar toda la cuerda en Bash
En Bash4 o posterior puede capitalizar los caracteres imprimibles utilizando la expansión de los parámetros de la siguiente manera.
$ String ^^
Supongamos que lanzamos las primeras 10 palabras de la salida del ejemplo del paso del bucle de desplazamiento en una variable llamada Pyramid. Tenga en cuenta que no modificado, el comportamiento esperado de hacer eco de su contenido es el siguiente.
Dominio
Pyramid = "A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ"
Echo $ Pyramid
Producción
A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ
Tenga en cuenta que, como era de esperar, no hay tapas. Vamos a explotar. Es decir, vamos a hacer todos sus personajes.
Dominio
echo $ Pyramid ^^
Producción
A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ
Eso fue fácil! ¿Qué tal si solo queremos convertir la primera letra en una cadena a tapas como una oración?? Si podemos! Todo lo que necesitamos hacer es probar un poco menos duro, un personaje menos para ser exactos.
Capitalizar solo la primera letra en una cadena
Tal vez capitalizar toda la cadena no es la técnica de manipulación de cadenas de bash que está buscando. ¿Qué pasa si solo necesita capitalizar la primera carta como una oración??
Comandos
Pyramid = "A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ"
echo $ Pyramid^
Producción
A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ
Ahora suponga que estamos más interesados en convertir cadenas en minúsculas. Afortunadamente, hay una forma pura de hacer esto; es decir, utilizar la expansión de los parámetros.
Convierta toda la cuerda en minúsculas en Bash
Convierta una cadena a todos en minúsculas en BASH utilizando el operador de expansión de parámetros de doble comercio (",,").
Comandos
Pyramid = "A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ";
echo $ Pyramid;
Echo $ Pyramid ,,
Producción
A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ
A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ
Convierta solo la primera letra en una cadena en minúsculas
Convierta el primer carácter en una cadena en minúsculas en BASH utilizando el operador de expansión de parámetros individuales (",").
Comandos
Pyramid = "A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ";
echo $ Pyramid;
Echo $ Pyramid,
Producción
A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ
A AB ABC ABCD ABCDE ABCDEF ABCDEFG ABCDEFGH ABCDEFGHI ABCDEFGHIJ
Asigne una cadena vacía un valor y devuelva su valor
A menudo desea establecer una devolución de retroceso para una cadena vacía y hacer que su valor persista a lo largo de un script bash, como el caso, cuando se acepta opcionalmente las variables del entorno. Esto se puede lograr utilizando la expansión de los parámetros.
Comandos
echo [$ str];
echo [$ str: = vacía];
echo [$ str]
Producción
[]
[vacío]
[vacío]
Notas: se supone que STR no está asignado
Reemplace un patrón que ocurra en una cadena una vez en Bash
Tenemos una cuerda sentada en una variable y queremos reemplazar la primera aparición de una subcadena. Así es cómo.
Uso básico
$ str/patrón/reemplazo
Comandos
str = "01101100011010010110111001110101111000011010000110100101101110011101000010111
0011000110110111101101101 ";
echo $ str;
Echo $ str/111/000
Producción
0110110001101001011011100111010101111000011010000110100101101110011101
0000101110011000110110111101101101
0110110001101001011000000000010100001000011010000110100101100000000001
0000100000011000110110000101101101
Reemplace todas las ocurrencias de un patrón en una cadena en Bash
Tenemos una cadena en una variable y queremos reemplazar todas las ocurrencias de una subcadena. Así es cómo.
Uso básico
$ str // patrón/reemplazo
Comandos
str = "0110110001101001011011100111010111100001101000011010010110111001110
10000101110011000110110111101101101 ";
echo $ str;
echo $ str // 111/000
Producción
01101100011010010110111001110101011110000110100001101001011011100
111010000101110011000110110111101101101
011011000110100101100000000001010000100001101000011010010110000000
00010000100000011000110110000101101101
Cómo manipular cadenas en BASH usando comandos externos
Para manipular cadenas en BASH utilizando un comando externo, necesitamos usar una característica que el manual de bash llame a la sustitución del comando. En resumen, lo que esté dentro de $ () o "se trata como un comando y se sustituye en su lugar. Francamente, prefiero la primera forma; Sin embargo, puede usar. La manera fácil de usar la sustitución del comando es asignar el resultado de la sustitución del comando a una variable de la siguiente manera.
Comandos
resultado = $ (comando)
En el caso de la manipulación de la cadena utilizando un comando externo en Bash, necesitaríamos abordar el eco de una cadena al comando, a menos que pase la cadena al comando como un parámetro se acepta. Así es como debería ser el nuevo resultado.
Comandos
resultado = $ (echo "$ resultado" | comando)
Ahora, intentemos hacer algo real. Sin embargo, reduzca una cadena que contenga palabras a la última palabra en la cadena? Para este ejemplo, usemos el comando externo mirando.
Notas sobre los siguientes comandos. Hagamos todo en minúsculas y deshacernos de los períodos. La cita es de Linus Torvalds. Es una cita realmente popular.
Comandos
cita = "hablar es barato. Muéstrame el código.";
last_word = $ (echo "$ cita //./ "| gawk 'imprimir $ (nf)');
echo "$ last_word ,,"
Producción
código
Aquí cubrimos cómo manipular las cadenas de la manera pura de Bash, así como el uso de comandos externos. Para las técnicas de manipulación de cadenas de bash puro, se utilizó una característica llamada expansión de parámetros. Por otro lado, para el caso de los comandos externos, se utilizó la sustitución de comandos. Admitentemente, al escribir esta pieza, mejoré mi capacidad para manipular cuerdas en Bash. Con suerte, tú también lo hiciste.
Tenga en cuenta que el tema de esta discusión no fue tratado en total. Sin embargo, se dejan ejercicios para aquellos que desean jugar un poco más. Para otras manipulaciones de cadenas no contenidas en este artículo, puede contactarme directamente o comunicarse con el editor.
Eso es suficiente manipulación de cuerdas, por ahora ... gracias,