GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Un ciclo For che utilizza gli array è meglio che utilizzare la divisione dei campi su una semplice variabile?

Ho diverse applicazioni aperte. Esecuzione di wmctrl e pipettando l'output su awk elenca gli ID delle finestre (escluse le finestre "sticky") in questo modo:

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

Posso inviare questo output a wmctrl per chiudere tutte queste finestre:

  • le finestre senza contenuto che deve essere salvato e le finestre che non necessitano di una risposta verranno chiuse senza chiedermelo ma

  • finestre come quelle degli editor con contenuto non salvato o terminali che eseguono un processo verranno chiuse "con grazia":la rispettiva applicazione presenterà una finestra che mi consentirà di salvare le modifiche o scartare le modifiche o di informarmi di un processo ancora in esecuzione.

Il seguente script, assegnato a una scorciatoia adatta, funziona:

#!/bin/bash

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

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

Ho scoperto che il più semplice (per me) for i in $list funziona anche.

C'è qualche motivo per preferire l'uno all'altro?

"sticky" e "gracefully" sono termini di man wmctrl .

Risposta accettata:

Nel tuo script $list è uguale a ${list[@]} .

Quest'ultima è la sintassi dell'array, ma nel tuo script è una variabile normale.

Poiché non hai spazi bianchi nel tuo wmctl elementi di output, non è necessario un array e utilizzando $list va benissimo.

Se era un array, $list sarebbe solo il primo elemento dell'array (=> item1 ) e ${list[@]} si estenderebbe a tutti gli articoli (=> item1 item2 item3 ).

Ma cosa volevi davvero se effettivamente era un array è "${list[@]}" (tra virgolette) che si estende a "item1" "item2" "item3" , quindi non si strozzerebbe sugli spazi bianchi.

(Leggi)


Ubuntu
  1. [Linux]:diagnostica i problemi di rete utilizzando MTR, meglio di traceroute!

  2. Linux vs Windows:quale sistema operativo è migliore per i giochi su PC

  3. Qualcosa di meglio di Cheese per l'acquisizione di video?

  4. Perché un VPS Linux è una scelta migliore di un VPS Windows

  5. Linux Vs Windows:perché Linux è migliore per la programmazione e lo sviluppo Web

Bash For Loops con esempi

Utilizzo di Keepalived per la gestione del failover semplice nei cluster

Come installare Windows 11 su Ubuntu 20.04 usando VirtualBox

Come installare il sottosistema Windows per Linux

Usare "${a:-b}" per l'assegnazione di variabili negli script?

Utilizzo della modalità avanzata Ubuntu 18.04 per Hyper-V su Windows 10