在导出命令中替换Bash变量

时间:2016-06-25 02:06:26

标签: bash

我试图通过将版本传递给函数来设置我的Java版本。但是,我不确定如何在命令中替换bash参数。 以下是我正在使用的功能

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

我将函数称为 -

setTheJavaVersion 1.7

1.7存储在" $ 1"但正如预期的那样,我收到错误消息 -

Unable to find any JVMs matching version "$1*".

不是bash专家,请原谅我这是一个愚蠢的问题。

2 个答案:

答案 0 :(得分:3)

你有一些不正确的事情。

function setTheJavaVersion() {
   ver=$(/usr/libexec/java_home -v "$1")
   export JAVA_HOME=$ver
}
  1. 单独声明并分配导出以避免屏蔽返回值。
  2. 对于shell扩展而不是使用旧版反引号,请改用$( ... )语法。
  3. 根据您的论据$1,您需要使用双引号,因为它不会使用shell扩展和单引号;最后的*毫无意义。

答案 1 :(得分:2)

引用是这里的问题。变化

'$1*'

"$1"'*'

允许扩展第一个参数。 shell脚本中的单引号和双引号不同。双引号(")允许变量在表达式中扩展,而单引号则为字面上的$ 1。