2016-06-25 9 views
1

バージョンを関数に渡してJavaバージョンを設定しようとしています。しかし、私はコマンドでbash引数をどのように置き換えることができるかわかりません。 1.7は「$ 1」に保存されているが、私は、エラーメッセージが表示されます期待通りれるエクスポートコマンドにBash変数を代入する

setTheJavaVersion 1.7 

- -

Unable to find any JVMs matching version "$1*". 
以下 は、私のように関数を呼び出しています、私は

function setTheJavaVersion(){ 
    export JAVA_HOME=`/usr/libexec/java_home -v '$1*'` 
} 

を使用しています機能です

バッシュエキスパートではありませんので、そんなに愚かな質問があればよろしくお願いします。

答えて

3

不適切なものがいくつかあります。

function setTheJavaVersion() { 
    ver=$(/usr/libexec/java_home -v "$1") 
    export JAVA_HOME=$ver 
} 
  1. 宣言し、戻り値をマスキング避けるために、個別にエクスポートを割り当てます。
  2. レガシーバックティックを使用する代わりにシェルを展開する場合は、代わりに$(...)シンタックスを使用してください。
  3. 引数が$1の場合は、シェル展開とシングルクォートでは機能しないため、二重引用符で囲む必要があります。その末尾の*は無意味です。
2

引用が問題です。最初の引数が展開できるようにするために

'$1*' 

"$1"'*' 

に変更します。シェルスクリプトでは、一重引用符と二重引用符が異なります。二重引用符( ")を使用すると、式内で変数を展開できますが、一重引用符を使用すると文字通り$ 1が得られます。