GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Une boucle For utilisant des tableaux est-elle meilleure que l'utilisation du fractionnement de champ sur une variable simple ?

J'ai plusieurs applications ouvertes. Exécution de wmctrl et diriger la sortie vers awk répertorie les identifiants de fenêtre (à l'exclusion des fenêtres "collantes") comme ceci :

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

Je peux envoyer cette sortie à wmctrl pour fermer toutes ces fenêtres :

  • les fenêtres sans contenu qui doivent être sauvegardées et les fenêtres qui n'ont pas besoin de réponse seront fermées sans me demander mais

  • les fenêtres telles que celles des éditeurs dont le contenu n'est pas enregistré ou les terminaux exécutant un processus seront fermées « gracieusement » :l'application respective présentera une fenêtre me permettant d'enregistrer les modifications ou d'annuler les modifications ou de m'informer d'un processus qui est toujours en cours d'exécution.

Le script suivant, associé à un raccourci approprié, fonctionne :

#!/bin/bash

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

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

J'ai trouvé que le plus simple (pour moi) for i in $list fonctionne également.

Y a-t-il une raison de préférer l'un à l'autre ?

"collant" et "gracieusement" sont des termes de man wmctrl .

Réponse acceptée :

Dans votre script $list est identique à ${list[@]} .

Cette dernière est une syntaxe de tableau, mais dans votre script, il s'agit d'une variable normale.

Comme vous n'avez pas d'espace dans votre wmctl éléments de sortie, vous n'avez pas besoin d'un tableau et utilisez $list est parfaitement bien.

Si c'était l'était un tableau, $list ne serait que le premier élément du tableau (=> item1 ) et ${list[@]} s'étendrait à tous les articles (=> item1 item2 item3 ).

Mais ce que vous vouliez vraiment si c'était en fait l'était un tableau est "${list[@]}" (avec guillemets) qui s'étend jusqu'à "item1" "item2" "item3" , afin qu'il ne s'étouffe pas avec les espaces.

(Lire)


Ubuntu
  1. Faire en sorte que Wmctrl ignore les fenêtres de l'espace de travail autre que l'actuel ?

  2. Quoi de mieux que du fromage pour la capture vidéo ?

  3. Meilleur sélecteur d'application pour Budgie Desktop ?

  4. Pourquoi un VPS Linux est-il un meilleur choix qu'un VPS Windows

  5. Linux Vs Windows - Pourquoi Linux est meilleur pour la programmation et le développement Web

Bash For Loops avec des exemples

Utilisation de Keepalived pour gérer le basculement simple dans les clusters

Comment installer Windows 11 sur Ubuntu 20.04 à l'aide de VirtualBox

Comment installer le sous-système Windows pour Linux

Utiliser "${a:-b}" pour l'affectation de variables dans les scripts ?

Utilisation du mode amélioré Ubuntu 18.04 pour Hyper-V sous Windows 10