두 가지 버전의 Python이 설치되어 있습니다. 따라서 pip를 사용하여 패키지를 다운로드해야 하는 경우 다음 중 하나를 사용해야 합니다.
python3.9 -m pip [args]
python3.8 -m pip [args]
내가 원하는 것은 내가 실행 하면 적절한 명령이 실행 되도록 pip39
대신 사용하고 싶다는 것입니다 .pythin3.9 -m
pip39 install something
pip39 freeze
나는 다음 함수를 작성했습니다.
pip39(){python3.9 -m pip "$1"}
매개변수가 하나뿐이므로 pip39 freeze
작동 합니다 . freeze
그러나 pip39 install something
2개의 매개변수가 전달되고 bash는 첫 번째 매개변수만 사용하므로 오류가 발생합니다.
그렇다면 여러 개의 인수를 넣는 방법은 무엇입니까 "$1"
?
답변1
Bourne과 같은 셸에서는 "$1"
함수의 첫 번째 인수(또는 함수 내부에서 확장되지 않은 경우 스크립트의 첫 번째 인수)로 확장됩니다.빈 문자열그렇지 않은 경우 두 번째, 세 번째... 열 번째가 "$2"
되며 제공된 모든 인수로 확장됩니다."$3"
"${10}"
"$@"
${1+"$1"}
제공된 경우 첫 번째 인수로 확장되고, 그렇지 않은 경우 아무 항목(빈 문자열도 아님)으로 확장됩니다. 따라서 ${1+"$1"} ${2+"$2"}
함수의 첫 번째 매개변수는 최대 2개까지 확장됩니다. yash
또는 셸 에서는 , , 및 로 zsh
단순화할 수 있습니다 "${@[1,2]}"
(또는 로 단순화할 수도 "$@[1,2]"
있음 zsh
) .ksh93
bash
zsh
"${@:1:2}"
pip39() {python3.9 -m pip "$1"}
예다루기 힘든그런데 문법. bash
필요한 다른 Bourne 유사 쉘 pip39() { python3.9 -m pip "$1";}
(또는 pip39() python3.9 -m pip "$1"
bash, posh 또는 yash는 아니지만 Bourne 쉘 및 대부분의 Bourne 유사 쉘) 에 필요합니다.
따라서 여기 bash(질문에 태그를 지정) 또는 zsh(질문의 코드 구문)에 다음이 필요합니다.
pip39(){ python3.9 -m pip "$@";}
pip39
모든 인수를 에 전달하면 python3.9
코드는 Bourne 및 POSIX와 호환됩니다.
또는 제한된 수의 매개변수만 전달합니다(여기에서는 3개를 예로 사용합니다).
pip39(){ python3.9 -m pip "${@:1:3}"; } # ksh93, bash, zsh
pip39(){ python3.9 -m pip "${@[1,3]}"; } # zsh, yash
pip39(){ python3.9 -m pip ${1+"$1"} ${2+"$2"} ${3+"$3"}; } # any Bourne-like shell
1 Bourne 쉘이 아닌 경우 9개로 제한됩니다. $10
셸 유사 ${10}
또는 ${1}0
셸 종속(불행히도 POSIX에서는 후자를 요구함)이므로 피해야 합니다.