より効率的なzsh文字列の解析/配列処理

より効率的なzsh文字列の解析/配列処理

zshで以下を行うより効率的な方法はありますか?

中間配列パラメータaおよび/またはb

このスクリプトはコマンドからいくつかの出力を取得します。出力が空でない場合は、最初の2行をスキップし、残りの行の最初のスペースの前のテキストを他のコマンドの引数として使用します。

#!/usr/bin/env zsh

packages=$(pip3 list -o)
if [[ -n ${packages} ]]; then
    print "${packages}"
    a=("${(f)packages}")
    b=("${a[@]:2}")
    PYTHONWARNINGS=ignore:DEPRECATION pip3 install -U "${b[@]%% *}"
fi

答え1

#!/usr/bin/env zsh

packages=(${${(f)"$(pip3 list -o)"}[3,-1]}) || exit

if (($#packages)); then
    print -rl -- $packages
    PYTHONWARNINGS=ignore:DEPRECATION pip3 install -U ${packages%% *}
fi

〜する短くzshに似ていますが、はるかに速いと思います。

ヘッダーの削除を避けるためにpip'を使用することをお勧めします(変更する必要がある形式で出力を提供します)。--format=freezepackage==1.2.3${packages%% *}${packages%==*}

関連情報