GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Es mejor un bucle For usando arreglos que usar división de campo en una variable simple?

Tengo varias aplicaciones abiertas. Ejecutando wmctrl y canalizando la salida a awk enumera los ID de las ventanas (excluyendo las ventanas "adherentes") de esta manera:

$ wmctrl -l | awk ' !/-1/ { print $1 } '
0x00a00018
0x04800005
0x04e00005
0x04400003
0x05000003
0x0540002b
0x05a00012
0x05800002
0x05c00003
$ 

Puedo enviar esta salida a wmctrl para cerrar todas estas ventanas:

  • las ventanas sin contenido que deba guardarse y las ventanas que no necesiten una respuesta se cerrarán sin preguntarme, pero

  • las ventanas como las de los editores con contenido no guardado o terminales que ejecutan un proceso se cerrarán "graciosamente":la aplicación respectiva presentará una ventana que me permitirá guardar cambios o descartar cambios o informarme de un proceso que aún se está ejecutando.

El siguiente script, asignado a un atajo adecuado, funciona:

#!/bin/bash

list=$(wmctrl -l | awk ' !/-1/ { print $1 } ')

for i in ${list[@]}
do
    wmctrl -i -a $i
    wmctrl -i -c $i
done

Encontré que el más simple (para mí) for i in $list también funciona.

¿Hay alguna razón para preferir uno sobre el otro?

"pegajoso" y "con gracia" son términos de man wmctrl .

Respuesta aceptada:

En tu script $list es lo mismo que ${list[@]} .

Esta última es sintaxis de matriz, pero en su secuencia de comandos es una variable normal.

Como no tiene espacios en blanco en su wmctl elementos de salida, no necesita una matriz y usa $list está perfectamente bien.

Si fuera una matriz, $list solo sería el primer elemento de la matriz (=> item1 ) y ${list[@]} se extendería a todos los artículos (=> item1 item2 item3 ).

Pero lo que realmente querías si en realidad era una matriz es "${list[@]}" (con comillas) que se extiende a "item1" "item2" "item3" , por lo que no se atragantaría con los espacios en blanco.

(Leer)


Ubuntu
  1. Linux vs Windows:qué sistema operativo es mejor para juegos de PC

  2. ¿Hacer que Wmctrl ignore las ventanas de Workspace que no sean las actuales?

  3. ¿Algo mejor que el queso para la captura de video?

  4. ¿Mejor conmutador de aplicaciones para Budgie Desktop?

  5. ¿Es (Ubuntu) el algoritmo de copia de archivos de Linux mejor que Windows 7?

Bash For Loops con ejemplos

Uso de Keepalived para administrar la conmutación por error simple en clústeres

Cómo instalar Windows 11 en Ubuntu 20.04 usando VirtualBox

Cómo instalar el subsistema de Windows para Linux

¿Usa “${a:-b}” para la asignación de variables en scripts?

Uso del modo mejorado Ubuntu 18.04 para Hyper-V en Windows 10