GNU/Linux >> Linux の 問題 >  >> Ubuntu

配列を使用するForループは、単純な変数でフィールド分割を使用するよりも優れていますか?

いくつかのアプリケーションを開いています。 wmctrlを実行しています 出力をawkにパイプします 次のようなウィンドウID(「スティッキー」ウィンドウを除く)を一覧表示します。

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

この出力をwmctrlに送信できます これらすべてのウィンドウを閉じるには:

  • 保存する必要のあるコンテンツのないウィンドウと応答の必要のないウィンドウは、私に尋ねることなく閉じられますが

  • 未保存のコンテンツを含むエディターやプロセスを実行している端末などのウィンドウは「正常に」閉じられます。それぞれのアプリケーションは、変更を保存または破棄したり、まだ実行中のプロセスを通知したりできるウィンドウを表示します。

    >

適切なショートカットに割り当てられた次のスクリプトは機能します:

#!/bin/bash

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

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

(私にとって)for i in $listの方が簡単であることがわかりました も機能します。

どちらか一方を優先する理由はありますか?

「スティッキー」と「優雅に」はman wmctrlの用語です 。

承認された回答:

スクリプト内$list ${list[@]}と同じです 。

後者は配列構文ですが、スクリプトでは通常の変数です。

wmctlに空白がないため 出力アイテムの場合、配列は必要ありません。$listを使用します。 完全に大丈夫です。

だった 配列、$list 配列の最初のアイテムのみになります(=> item1 )および${list[@]} すべてのアイテムに拡張されます(=> item1 item2 item3

しかし、それが実際にだった場合、あなたが本当に望んでいたこと 配列は"${list[@]}" (引用符付き)"item1" "item2" "item3"に拡張 、空白で詰まらないようにします。

(読む)


Ubuntu
  1. LinuxとWindows:どちらのOSがPCゲームに適しているか

  2. Wmctrlに現在以外のWorkspaceのWindowsを無視させますか?

  3. ビデオキャプチャ用のチーズよりも優れているものはありますか?

  1. [Linux]:MTRを使用してネットワークの問題を診断– tracerouteよりも優れています!

  2. Budgie Desktop用のより優れたアプリケーションスイッチャー?

  3. Linux と Windows – Linux がプログラミングと Web 開発に適している理由

  1. LinuxVPSがWindowsVPSよりも優れているのはなぜですか

  2. systemd サービスの ExecStart のコマンド パスで変数を使用する

  3. (Ubuntu) Linux のファイル コピー アルゴリズムは Windows 7 より優れていますか?