Saltar al contenido

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

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 el nombre de una variable, se utilizan para la expansión de parámetros para que pueda hacer cosas como:

  • Truncar el contenido de una variable

    $ var="abcde"; echo ${var%d*}
    abc
    
  • Haga 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 repiten en bucles:

$ echo f{oo,ee,a}d
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 incremento y cero a la izquierda no estaban disponibles antes de Bash 4.

Gracias a gboffi por recordarme acerca de las expansiones de aparatos ortopédicos.

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 variables enteras y de matriz e incluir espacios alrededor de los operadores para facilitar la lectura.

Los corchetes simples también se utilizan para índices de matriz:

array[4]="hello"

element=${array[index]}

Se requieren llaves para (¿la mayoría / todas?) Las referencias de matriz en el lado derecho.

ephemient's 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 soporte ([) usually actually calls a program named [; man test or man [ for more info. Example:

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

    $ VARIABLE=abcdef
    $ if [[ $VARIABLE == 123456 ]];  entonces repita sí;  si no, echo 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 variables sin ambigüedades. Ejemplo:

    $ VARIABLE=abcdef
    $ echo Variable: $VARIABLE
    Variable: abcdef
    $ echo Variable: $VARIABLE123456
    Variable:
    $ echo Variable: ${VARIABLE}123456
    Variable: abcdef123456
    

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

    $ { date; top -b -n1 | 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 (vea la referencia de bash); esencialmente, un punto y coma ; después del último comando entre llaves es imprescindible, y las llaves {, } debe 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/obsolete

Tirantes rizados

${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
¡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 *