Saltar al contenido

Cómo usar corchetes simples o dobles, paréntesis, llaves

Sé libre de divulgar nuestros post y códigos en tus redes, danos de tu ayuda para aumentar nuestra comunidad.

Solución:

en bash, test y [ are shell builtins.

The double bracket, which is a shell keyword, enables additional functionality. For example, you can use && and || instead of -a and -o and there’s a regular expression matching operator =~.

Also, in a simple test, double square brackets seem to evaluate quite a lot quicker than single ones.

$ time for ((i=0; i<10000000; i++)); do [[ "$i" = 1000 ]];  hecho real 0m24.548s usuario 0m24.337s sys 0m0.036s $ tiempo para ((i=0; i<10000000; i++));  hacer [ "$i" = 1000 ];  hecho real 0m33.478s usuario 0m33.478s sys 0m0.000s

Las llaves, además de delimitar un nombre de variable, se utilizan para la expansión de parámetros, por lo que puede hacer cosas como:

  • Truncar el contenido de una variable

    $ var="abcde"; echo $var%d*
    abc
    
  • Hacer sustituciones similares a sed

    $ var="abcde"; echo $var/de/12
    abc12
    
  • Usar un valor predeterminado

    $ default="hello"; unset var; echo $var:-$default
    hello
    
  • y varios mas

Además, las expansiones de llaves crean listas de cadenas que normalmente se iteran en bucles:

$ echo foo,ee,ad
food feed fad

$ mv error.log,.OLD
(error.log is renamed to error.log.OLD because the brace expression
expands to "mv error.log error.log.OLD")

$ for num in 000..2; do echo "$num"; done
000
001
002

$ echo 00..8..2
00 02 04 06 08

$ echo D..T..4
D H L P T

Tenga en cuenta que las funciones de cero inicial e incremento no estaban disponibles antes de Bash 4.

Gracias a gboffi por recordarme acerca de las expansiones de llaves.

Los paréntesis dobles se utilizan para operaciones aritméticas:

((a++))

((meaning = 42))

for ((i=0; i<10; i++))

echo $((a + b + (14 * c)))

y le permiten omitir los signos de dólar en números enteros y array variables e incluya espacios alrededor de los operadores para mejorar la legibilidad.

Los soportes individuales también se utilizan para array índices:

array[4]="hello"

element=$array[index]

Se requieren llaves para (¿la mayoría/todos?) array referencias en el lado derecho.

de efímeros El comentario me recordó que los paréntesis también se usan para subcapas. Y que se utilizan para crear matrices.

array=(1 2 3)
echo $array[1]
2

  1. un solo paréntesis ([) usually actually calls a program named [; man test or man [ for more info. Example:

    $ VARIABLE=abcdef
    $ if [ $VARIABLE == abcdef ]  ;  entonces echo sí;  más eco no;  si si
    
  2. El doble corchete ([[) does the same thing (basically) as a single bracket, but is a bash builtin.

    $ VARIABLE=abcdef
    $ if [[ $VARIABLE == 123456 ]];  entonces echo sí;  más eco no;  fi no
    
  3. paréntesis (()) se utilizan para crear una subcapa. Por ejemplo:

    $ pwd
    /home/user 
    $ (cd /tmp; pwd)
    /tmp
    $ pwd
    /home/user
    

    Como puede ver, el subshell le permitió realizar operaciones sin afectar el entorno del shell actual.

  4. (a) Tirantes () se utilizan para identificar inequívocamente las variables. Ejemplo:

    $ VARIABLE=abcdef
    $ echo Variable: $VARIABLE
    Variable: abcdef
    $ echo Variable: $VARIABLE123456
    Variable:
    $ echo Variable: $VARIABLE123456
    Variable: abcdef123456
    

    (b) Las llaves también se utilizan para ejecutar una secuencia de comandos en el Actual contexto de shell, por ejemplo

    $  head ;  >logfile 
    # 'date' and 'top' output are concatenated, 
    # could be useful sometimes to hunt for a top loader )
    
    $  date; make 2>&1; date;  | tee logfile
    # now we can calculate the duration of a build from the logfile
    

Hay una sutil diferencia sintáctica con ( ), aunque (ver referencia de bash) ; esencialmente, un punto y coma ; después del último comando entre llaves es obligatorio, y las llaves , deber estar rodeado de espacios.

Soportes

if [ CONDITION ]    Test construct  
if [[ CONDITION ]]  Extended test construct  
Array[1]=element1   Array initialization  
[a-z]               Range of characters within a Regular Expression
$[ expression ]     A non-standard & obsolete version of $(( expression )) [1]

[1] http://wiki.bash-hackers.org/scripting/obsoleto

llaves rizadas

$variable                             Parameter substitution  
$!variable                            Indirect variable reference  
 command1; command2; . . . commandN;  Block of code  
string1,string2,string3,...           Brace expansion  
a..z                                  Extended brace expansion  
                                      Text replacement, after find and xargs

paréntesis

( command1; command2 )             Command group executed within a subshell  
Array=(element1 element2 element3) Array initialization  
result=$(COMMAND)                  Command substitution, new style  
>(COMMAND)                         Process substitution  
<(COMMAND)                         Process substitution 

paréntesis dobles

(( var = 78 ))            Integer arithmetic   
var=$(( 20 + 5 ))         Integer arithmetic, with variable assignment   
(( var++ ))               C-style variable increment   
(( var-- ))               C-style variable decrement   
(( var0 = var1<98?9:21 )) C-style ternary operation

Más adelante puedes encontrar los comentarios de otros sys admins, tú también puedes mostrar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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