首页>Linux>source

我安装了两个版本的python.因此,如果我需要使用pip下载软件包,则必须使用以下任一方法:

  1. python3.9 -m pip [args]
  2. python3.8 -m pip [args]

我想要的是我想使用 pip39 代替 pythin3.9 -m 这样,如果我运行 pip39 install somethingpip39 freeze 然后执行适当的命令。

我编写了以下函数:

pip39(){python3.9 -m pip "$1"}

pip39 freeze效果很好 自从 freeze 是一个参数.但是对于 pip39 install something 由于传递了2个参数,bash只会给出第一个参数,因此会产生错误。

那么如何将多个参数放入in "$1"

最新回答
  • 27天前
    1 #

    在像伯恩的贝壳中, "$1" 扩展为函数的第一个参数(如果未在函数内部扩展,则扩展为脚本的参数),否则为空字符串"$2" 将是第二个, "$3" 第三... "${10}" 第十¹, "[email protected]" 扩展为所有提供的参数。

    ${1+"$1"} 如果提供,则扩展为第一个参数,如果不提供,则不扩展为任何值(甚至不包括空字符串).太棒了 最多可扩展到该函数的第一个参数中的2个.在 ${1+"$1"} ${2+"$2"}yash 壳,可以简化为 zsh (甚至到 "${@[1,2]}""[email protected][1,2]" )和 zshksh93bashzsh

    "${@:1:2}"zsh语法.在 pip39() {python3.9 -m pip "$1"} 或其他类似伯恩的贝壳,您需要 bash (或简称为 pip39() { python3.9 -m pip "$1";} 在Bourne外壳和大多数类似Bourne的外壳中,尽管不是bash,pash或yash)。

    因此,在这里,您需要使用bash(为您的问题加标签)或zsh(如您的问题的代码语法):

    pip39() python3.9 -m pip "$1"
    

    传递 pip39(){ python3.9 -m pip "[email protected]";}的所有参数 到 pip39 ,该代码与Bourne和POSIX兼容。

    或者只传递有限数量的参数(这里以3为例):

    python3.9
    

    ¹不在Bourne外壳中,您限于9。 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 要么像 $10${10} 取决于外壳(不幸的是POSIX需要后者),因此应避免。

    ${1}0

  • 如何在Kali Linux / Reset Terminal中恢复默认的Bash Shell
  • autocomplete:Bash如何知道何时进行文件名扩展?