更高效的 zsh 字符串解析/数组处理

更高效的 zsh 字符串解析/数组处理

在 zsh 中是否有更有效的方法来执行以下操作?

我想可能有办法摆脱中间数组参数a和/或b.

该脚本从命令获取一些输出。如果该输出不为空,它将跳过前两行,然后将其余各行的第一个空格之前的文本用作另一个命令的参数。

#!/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's--format=freeze来避免删除标头(提供package==1.2.3您需要将 更改为 的格式${packages%% *}的输出${packages%==*})。

相关内容