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=freeze
package==1.2.3
${packages%% *}
${packages%==*}