@BMargulies Answer 提供了一个解决方案。但我认为理解你做错的原因是相关的......这样下次你可以(至少)更好地尝试让它正确。
查看您的第一个命令行...
$myjava=cat c/program\ files\ \(x86\)/java/jre7
这有很多问题。首先,设置 shell 变量的语法是:
<name>=<word>
所以你在第一行实际上要做的事情如下:
它正在为字符串“cat”设置一个变量名未知的变量:
- 变量名称未知,因为它取决于“myjava”变量的先前值。(话语“$myjava”表示“在此处插入 'myjava' 变量的值”。)
- 将变量设置为“cat”的原因是“cat”是“=”之后的第一个单词。
然后,它尝试将行的其余部分(即“c/program\ files\ (x86)/java/jre7”)作为命令运行。但它不是一个命令:它是一个目录。这是您看到的“未找到”错误消息的最可能来源。
最重要的是,您似乎正在尝试使用“cat”命令来做某事。“cat”命令(以这种形式)读取文件的内容并将其写入标准输出。
- 你没有文件。您正在查看一个目录。
- 您不关心目录的内容。(这不是您访问它的方式......)
- 你不是在看标准输出。
简而言之,这里完全不需要“猫”。您只需要目录的路径名。所以第一行的正确形式是:
myjava=c/program\ files\ \(x86\)/java/jre7
或使用引号:
myjava="c/program files (x86)/java/jre7"
或者
myjava='c/program files (x86)/java/jre7'
这三种引用都具有相同的效果。它们导致“=”之后的内容被解析为单个<word>
. (这 3 种引用风格之间的行为有所不同,但在这里它们并不重要。)
第二行实际上接近它需要的。你写了:
export JAVA_HOME=myjava
表示将 JAVA_HOME 设置为文字字符串 "myjava" ... 并将其导出。但是您想使用名为“myjava”的 shell 变量的值。那是:
export JAVA_HOME=$myjava
“$myjava”表示“插入变量 'myjava' 的值”......见上文。
@BMargulies 答案将这两行合并为 on,并取消了(不必要的)局部变量“myjava”。我也是这样做的。