Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
linux:bash:shellvariables [12/10/2018 05:01] – [resumen expansion] matelinux:bash:shellvariables [01/10/2024 03:53] (actual) – [Operaciones sobre cadenas] mate
Línia 1: Línia 1:
 = 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
  
Línia 29: Línia 30:
 ^ 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 |
Línia 43: Línia 44:
 === 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]]
Línia 87: Línia 90:
     * ''${PARAMETER?WORD}''     * ''${PARAMETER?WORD}''
  
 ++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" != "$b" ] && echo "diferentes" || echo "iguales"''   * ''$ a=foo; b=bar; [ "$a" != "$b" ] && echo "diferentes" || echo "iguales"''
-  * ''$ a=foto.jpg ; [[ "$a" != *.gif ]] && echo "no gif" || echo "gif"'' <- doble corchetes hacen pattern matching+  * ''$ a=foto.jpg ; %%[[ "$a" != *.gif ]]%% && echo "no gif" || echo "gif"'' <- doble corchetes hacen pattern matching
   * ''$ a=foo; b=bar; [ "$a" = "foo" -a "$b" = "bar" ] && echo "todo OK" || echo "algo falla"'' <- -a equivale AND   * ''$ a=foo; b=bar; [ "$a" = "foo" -a "$b" = "bar" ] && echo "todo OK" || echo "algo falla"'' <- -a equivale AND
   * ''$ 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
Línia 113: Línia 130:
     * @ indica todos -> (se podrá indicar otra cosa?)     * @ indica todos -> (se podrá indicar otra cosa?)
  
-  * recorrer una cadena palabra a palabra:<code> +=== ejemplos 
-cadena="Esto es una cadena"+  * 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
 </code> </code>
 +  * subcadena en cadena : ''[[ $string =~ $substring ]]''
 +
 == Operaciones sobre nombres de ficheros: == Operaciones sobre nombres de ficheros:
 partiendo de esta cadena: ''foo=/tmp/mi.directorio/imagen.png'' partiendo de esta cadena: ''foo=/tmp/mi.directorio/imagen.png''
Línia 137: Línia 157:
  
 == Operaciones con cadenas desde bash == Operaciones con cadenas desde bash
-  * [[http://www.marqueta.org/cadenas-en-bash/]]+  * <del>[[http://www.marqueta.org/cadenas-en-bash/]]</del>
   * [[http://stackoverflow.com/questions/428109/extract-substring-in-bash]]   * [[http://stackoverflow.com/questions/428109/extract-substring-in-bash]]
   * [[http://rm-rf.es/unix-uso-del-comando-cut/]]   * [[http://rm-rf.es/unix-uso-del-comando-cut/]]
  
-== indirection 
-usar el valor de una variable para acceder al contenido de otra 
-<code bash> 
-# declaramos 2 variables 
-export xyzzy=plugh ; export plugh=cave 
- 
-echo ${xyzzy}  # normal, xyzzy to plugh -> plugh 
- 
-echo ${!xyzzy} # indirection, xyzzy to plugh to cave -> cave 
-</code> 
- 
-existen 2 casos en el que este comportamiento se ve modificado: 
-  * ''${!N*}'' : muestra las variables que empiecen por N 
-  * ''${!name[@]}'' 
- 
-<code bash> 
-export myVar="hi" 
-echo ${!my*} # myVar 
- 
-export ${!my*}="bye" 
-echo $myVar # bye 
-</code> 
- 
-/vía: [[https://stackoverflow.com/questions/8515411/what-is-indirect-expansion-what-does-var-mean]] 
  
 == 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>
Línia 178: Línia 174:
 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>
  
  • linux/bash/shellvariables.1539345676.txt.gz
  • Darrera modificació: 12/10/2018 05:01
  • per mate