보다 효율적인 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'를 사용하는 것이 좋습니다 ( 변경해야 하는 형식 으로 출력 제공 ).--format=freezepackage==1.2.3${packages%% *}${packages%==*}

관련 정보