Script de Shell: varios usos de ${...} en cadenas
1. ${var}
Variables calificadas.
Si un nombre de variable A es la primera parte de otro nombre de variable AB, entonces si desea obtener el valor de A cuando AB está conectado, debe usar ${var} para calificar.
Si el nombre de la variable no causa ambigüedad (es decir, un nombre de variable independiente), no hay diferencia entre ${var} y $var.
var="hola"
var_01="hola01"
eco $var $var_01 ${var}_01
gt? ;gt; gt; hola hola01 hola_01
2. ${#var}
Obtener la longitud de la variable var
var="hola"
echo ${#var}
gt; gt; 5
3. ${var#}
Elimina los caracteres al final. comienzo de la variable (String),
Lo que sigue a "#" puede ser una cadena literal o una expresión regular (coincidencia diferida).
var="hola"
echo ${var#he}
gt; gt; /res_pos/path/from/something"
echo ${var#/}
gt; gt; gt; res_pos/path/from/something # Eliminar el primer "/ "
echo ${var#/*/}
gt; gt; ruta/de/algo # ¿Eliminar la cadena cuya primera parte coincide con "/*/" es, " /res_pos/"
4. ${var##}
Elimina el carácter (cadena) al principio de la variable,
Sin embargo , cuando se usan 2 "# #", la coincidencia es codiciosa (coincidencia codiciosa, es decir, hacer coincidir tanto como sea posible).
echo ${var##/*/}
gt; gt; ¿eliminar la cadena cuya primera parte coincide con "/*/", es decir, " /res_pos/ruta /desde/".
5. ${var}
Elimina los caracteres (cadenas) al final de la variable.
Lo que sigue a "" puede ser una cadena literal o. una expresión regular (coincidencia diferida).
var="hola"
echo ${varllo}
gt; gt; él
var="~/ res_pos/path/from/something"
echo ${var/*}
gt; gt; gt; ~/res_pos/path/from # Eliminar el "/something" final
6. ${var}
Elimina los caracteres (cadena) al final de la variable,
Sin embargo, cuando se usan 2 "", la coincidencia es codicioso (Correspondiente al ítem 4)
var="~/res_pos/path/from/something"
echo ${var/*}
gt ; gt; gt; ~ # Eliminar todo el contenido después del primer "/" (incluido "/"). var::}
Similar al concepto de corte de Python, toma el índice inicial de la variable var,
una subcadena de longitud especificada (${var: index: length }).
var="~/res_pos/path/from/something"
echo ${var:0:5}
gt; /res
echo ${var: 1: 5}
gt; gt; /res_ ? # Se puede ver que el índice de la cadena comienza desde 0 p>
echo ${var::5}
gt; gt; ~/res ? # Omitir "índice", el valor predeterminado es comenzar desde 0
echo ${var :1:}
gt; gt; # Omitir "longitud", la longitud predeterminada es 0, por lo que la salida está vacía
8. ${ var//} p>
Reemplazo de cadena.
Reemplace la cadena A en var con la cadena B (${var/A/B}).
var="hola mundo"
echo ${var/hola/hi}
gt; gt; hola mundo? se reemplaza por "hi"
echo ${var/l/X}
gt; gt; heXlo world?
9. ${var///}
Reemplazo de cadena,
Igual que el punto 8, excepto que ahora todas las apariciones son Reemplace la cadena A con la cadena B (${var//A/B}).
var="hola mundo"
echo ${var//l/X}
gt; gt; heXXo worXd? " se reemplazan con "X"
10. ${var/#/}
Reemplace la cadena A al principio de la cadena con la cadena B,
(${var/#A/B}), la diferencia con el punto 8 es que aquí solo se reemplaza la primera cadena A.
var="hola mundo. hola bebé."
echo ${var//h/H}
gt; Hola bebé. # Reemplaza todas las "h" con "H"
echo ${var/#h/H}
gt; Hola mundo. Reemplaza la "h" en el encabezado con "H"
echo ${var/e/E}
gt; hola mundo # Reemplaza el primera aparición de "e" con "E"
echo ${var/#e/E}
gt; hola mundo # El primer carácter. no es "e", por lo que no se realiza ningún reemplazo y se genera como está.
11. ${var//}
Reemplazar la cadena A al final de la cadena con la cadena B,
(${var/A/B }) , similar al punto 10, excepto que trata con el final de la cadena.
var="hola hola"
echo ${var/o/END}
gt; gt; hola infiernoEND # Cambia los caracteres finales " o", sustituido por "FIN".