2つのバージョンの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"}
パラメータが1つだけなのでpip39 freeze
動作します。freeze
ただし、pip39 install something
2つのパラメータが渡され、bashは最初のパラメータのみを使用するため、エラーが発生します。
それでは、複数の引数を入れる方法は何ですか"$1"
?
答え1
Bourneなどのシェルでは、"$1"
関数の最初の引数(または関数内で拡張されていない場合はスクリプトの最初の引数)に展開されます。空の文字列それ以外の場合は、2番目、3番目... 10番目に"$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では後者を要求する)なので、避けるべきです。