Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia |
linux:bash:shellvariables [25/02/2019 06:32] – [Operaciones sobre cadenas] mate | linux:bash:shellvariables [01/10/2024 03:53] (actual) – [Operaciones sobre cadenas] mate |
---|
= Special Shell Variables & Parameter Substitution and Expansion | = Special Shell Variables & Parameter Substitution and Expansion |
| {{tag>linux}}{{tag>bash}} |
**$** es utilizado para expansión de parámetros y sustitución de comandos | **$** es utilizado para expansión de parámetros y sustitución de comandos |
| |
^ expresión ^ Significado ^ | ^ expresión ^ Significado ^ |
| ${variable} | valor de variable, lo mismo que $variable | | | ${variable} | valor de variable, lo mismo que $variable | |
| ${parametro-valorPorDefecto}} | si el parámetro no está establecido, se le asigna el de por defecto | | | ${parametro-valorPorDefecto} | si el parámetro no está establecido, se le asigna el de por defecto | |
| ${parametro:-valorPorDefecto}} | si el parámetro no está establecido o es vacío, se le asigna el de por defecto (sobre variables solo?) | | | ${parametro:-valorPorDefecto} | si el parámetro no está establecido o es vacío, se le asigna el de por defecto (sobre variables solo?) | |
| ${parametro=valorPorDefecto}} | si el parámetro no está establecido, se le asigna el de por defecto (no funciona sobre parametros posicionales -$1,$2...-) | | | ${parametro=valorPorDefecto} | si el parámetro no está establecido, se le asigna el de por defecto (no funciona sobre parametros posicionales -$1,$2...-) | |
| ${parametro:=valorPorDefecto}} | si el parámetro no está establecido o es vacío, se le asigna el de por defecto (no funciona sobre parametros posicionales -$1,$2...-)| | | ${parametro:=valorPorDefecto} | si el parámetro no está establecido o es vacío, se le asigna el de por defecto (no funciona sobre parametros posicionales -$1,$2...-)| |
| ${variable?MensajeError} | comprueba si variable no está establecida, mostrando el mensaje de error y para la ejecución del script | | | ${variable?MensajeError} | comprueba si variable no está establecida, mostrando el mensaje de error y para la ejecución del script | |
| ${variable:?MensajeError} | comprueba si variable no está establecida o si es vacía, mostrando el mensaje de error y para la ejecución del script | | | ${variable:?MensajeError} | comprueba si variable no está establecida o si es vacía, mostrando el mensaje de error y para la ejecución del script | |
=== resumen expansion | === resumen expansion |
/via: [[http://wiki.bash-hackers.org/syntax/pe?do=]]\\ | /via: [[http://wiki.bash-hackers.org/syntax/pe?do=]]\\ |
| /mas: [[https://tldp.org/LDP/abs/html/string-manipulation.html]] |
| |
Looking for a specific syntax you saw, without knowing the name? | Looking for a specific syntax you saw, without knowing the name? |
* [[#simple_usage | Simple usage]] | * [[#simple_usage | Simple usage]] |
+info: [[linux:bash:indirectreferences|]] | +info: [[linux:bash:indirectreferences|]] |
== Operaciones sobre cadenas | == Operaciones sobre cadenas |
/vía: [[http://www.marqueta.org/cadenas-en-bash/]] | * /vía: [[http://www.marqueta.org/cadenas-en-bash/]] |
^ expresión ^ Significado ^ Ejemplo ^ | * /vía: [[https://tldp.org/LDP/abs/html/string-manipulation.html]] |
| ''${#parametro}'' | longitud de parámetro | echo ${#string} | | * /via: [[https://itsfoss.com/es/cadenas-bash/]] |
| ''${cadena:posición}'' | extrae subcadena desde posición | echo ${string:4} | | |
| ''${cadena:posición:longitud}'' | extrae subcadena desde posición la longitud solicitada | echo ${string:4:7} ; echo ${string::-1} | | |
| ''${cadena#subcadena}'' | eliminar subcadena del principio de la cadena | echo ${string#substring | | |
| ''${cadena%subcadena}'' | eliminar subcadena del final de la cadena | echo ${string%substring | | |
| ''${cadena/s1/s2}'' | reemplazar primera aparicion s1 por s2 | | | |
| ''${cadena%%//%%s1/s2}'' | reemplazar todas aparicion s1 por s2 | | | |
| ''${cadena/#s1/s2}'' | reemplazar si hay coincidencia al princpio de cadena | | | |
| ''${cadena/%s1/s2}'' | reemplazar si hay coincidencia al final de cadena | | | |
| ''${cadena##*separador}'' | extrae el último elemento de la ristra, usando separador | %%data=foo,bar,baz;echo ${data##*,}%% | | |
| |
| ^ expresión ^ Significado ^ Ejemplo ^ |
| | ''${#parametro}'' | longitud de parámetro | echo ${#string} | |
| | ''${cadena:posición}'' | extrae subcadena desde posición | echo ${string:4} | |
| | ''${cadena:posición:longitud}'' | extrae subcadena desde posición la longitud solicitada | echo ${string:4:7} ; echo ${string::-1} | |
| | ''${cadena#subcadena}'' | eliminar subcadena del principio de la cadena | echo ${string#substring%%}%% | |
| | ''${cadena%subcadena}'' | eliminar subcadena del final de la cadena\\ permite uso * | echo ${string%substring%%}%%\\ echo ${string%substring*%%}%% | |
| | ''${cadena/s1/s2}'' | reemplazar primera aparicion s1 por s2 | | |
| | ''${cadena%%//%%s1/s2}'' | reemplazar todas aparicion s1 por s2 | | |
| | ''${cadena/#s1/s2}'' | reemplazar si hay coincidencia al princpio de cadena | | |
| | ''${cadena/%s1/s2}'' | reemplazar si hay coincidencia al final de cadena | | |
| | recorrido | |
| | ''${cadena##*separador}'' | extrae el último elemento de la ristra, usando separador | %%data=foo,bar,baz;echo ${data##*,}%% | |
| | mayúsculas y minúsculas| |
| | ''${cadena^^}'' | convierte a mayúsculas | | |
| | ''${cadena^}'' | a mayúsculas el primer carácter | | |
| | ''${cadena,,}'' | convierte a minúsculas | | |
| | ''${cadena,}'' | a minúsculas el primer carácter | | |
| | ''${¢adena^^[chars]}'' | cambia chars a mayúsculas | | |
| | | | | |
| |
| === comparaciones |
* ''$ a=foo; b=bar; [ "$a" = "$b" ] && echo "iguales" || echo "diferentes"'' <- espacios en condición importantes | * ''$ a=foo; b=bar; [ "$a" = "$b" ] && echo "iguales" || echo "diferentes"'' <- espacios en condición importantes |
* ''$ a=foo; b=bar; [ "$a" == "$b" ] && echo "iguales" || echo "diferentes"'' <- idem anterior | * ''$ a=foo; b=bar; [ "$a" == "$b" ] && echo "iguales" || echo "diferentes"'' <- idem anterior |
* ''$ a=foo; b=bar; [ "$a" = "foo" -o "$b" = "bar" ] && echo "al menos 1 OK" || echo "ninguno OK"'' <- -o equivale OR | * ''$ a=foo; b=bar; [ "$a" = "foo" -o "$b" = "bar" ] && echo "al menos 1 OK" || echo "ninguno OK"'' <- -o equivale OR |
| |
| === parámetros |
* ${@:param:num_param} -> coge desde <param> el número de parámetros indicado por <num_param> | * ${@:param:num_param} -> coge desde <param> el número de parámetros indicado por <num_param> |
* permite acceder a parámetros más allá del 10 | * permite acceder a parámetros más allá del 10 |
* ''${@:7:2}'' -> devuelve $7 y $8 | * ''${@:7:2}'' -> devuelve $7 y $8 |
* @ indica todos -> (se podrá indicar otra cosa?) | * @ indica todos -> (se podrá indicar otra cosa?) |
* recorrer una cadena palabra a palabra:<code> | |
cadena="Esto es una cadena" | === ejemplos |
| * recorrer una cadena palabra a palabra: |
| * <code bash>cadena="Esto es una cadena" |
arr=($cadena) | arr=($cadena) |
for i in ${arr[@]}; do echo $i; done | for i in ${arr[@]}; do echo $i; done |
</code> | </code> |
<code> | *<code bash> |
cadena="Esto es una cadena" | cadena="Esto es una cadena" |
for i in ${cadena[@]}; do echo $i; done | for i in ${cadena[@]}; do echo $i; done |
== bash shell expansion | == bash shell expansion |
^ comando ^ descripción ^ | ^ comando ^ descripción ^ |
| ''${Var}'' | variable | | | ''${var}'' | variable | |
| ''${!Var}'' | Indirect expansion | | | ''${!var}'' | Indirect expansion | |
| ''${!Var@}'' | Prefix expansion | | | ''${!var@}'' | Prefix expansion | |
| ''${!Var[@]}''| Array keys expansion | | | ''${!var[@]}''| Array keys expansion | |
| ''${Var[@]}'' | Plain array expansion | | | ''${var[@]}'' | Plain array expansion | |
| |
<code bash; title=indirection> | <code bash; title=indirection> |
var_one=a-value | var_one=a-value |
| |
echo "${varname}" # var_one | echo "${varname}" # var_one |
echo "${!varname} and ${var_one}" # a-value and a-value | echo "${var_one}" # a-value |
| echo "${!varname}" # a-value |
</code> | </code> |
| |