如何在bash中调用类路径有空格的java程序?
假设我有一个名为如何在bash中调用类路径有空格的java程序?,java,bash,command-line-interface,Java,Bash,Command Line Interface,假设我有一个名为whitespace的文件夹,其中包含一个名为foo的类文件 在命令行上,我可以通过以下命令在 java -cp "white space/" foo 它会很好的工作 我想在Bash中将整个命令设置为一个变量,并调用这个变量,而不是整个命令本身 因此,假设我将命令设置为 bar='java -cp "white space/" foo' 我尝试通过执行$bar来调用该命令,但始终收到一个错误消息: Error: Could not find or load main clas
whitespace
的文件夹,其中包含一个名为foo
的类文件
在命令行上,我可以通过以下命令在
java -cp "white space/" foo
它会很好的工作
我想在Bash中将整个命令设置为一个变量,并调用这个变量,而不是整个命令本身
因此,假设我将命令设置为
bar='java -cp "white space/" foo'
我尝试通过执行$bar
来调用该命令,但始终收到一个错误消息:
Error: Could not find or load main class space
如何解决这个问题?不要使用变量来存储整个命令行,因为您不能容纳空格。使用数组,最好只保存选项并单独指定命令
options=(-cp "white space/" foo)
java "${options[@]}"
或者,定义一个函数:
bar () {
java -cp "white space/" foo
}
事情的解释是不同的,因为解析输入命令和启动带有参数的外部程序是bash完成的两个不同步骤,这里第一步的一部分已经完成 解决办法是:
eval "$bar"
有关更多详细信息,请参阅:能否像在java中一样在bash中转义char?所以它看起来是这样的:
bar=“java-cp\”空白/\“foo”
?如何呈现实际失败的代码?如果不了解您如何使用$bar
,我们就无法真正回答。也就是说,请提供一个。注意,/
实际上不是目录名的一部分。最好省略它。eval
是一个糟糕的解决方案。使用@chepner答案中的数组或函数。