在 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%==*}
)。