Shell-Script

更高效的 zsh 字元串解析/數組處理

  • November 12, 2019

有沒有更有效的方法在 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
#!/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%==*})。

引用自:https://unix.stackexchange.com/questions/551663