我目前正在尝试创建一个执行Java主类的bash脚本,其中包含一个存档文件的路径作为参数。我想确保它可以处理该路径中的空间,这让我有点头疼。
我想将该路径设置为环境变量,并在执行主类时调用它,因此脚本看起来像这样:
export ArgPath='/Foo Path/foo.zip'
$JAVA_HOME/bin/java -cp ./foo.jar foopackage.main -a $ArgPath
不幸的是,当我在Bash中执行此命令时,命令就会出现:
/foo_Java_Home/bin/java -cp ./foo.jar foopackage.main -a /Foo Path/foo.zip
Java参数不能包含空格。 Java将“/ Foo”和“Path / foo.zip”视为两个独立的参数。好的,那不是问题。 Java可以处理带空格的参数。我需要找到一些方法来获得双引号或单引号。我会尝试绕过路径的双引号。该脚本现在看起来像这样:
export ArgPath='\"/Foo Path/foo.zip\"'
$JAVA_HOME/bin/java -cp ./foo.jar foopackage.main -a $ArgPath
Bash给了我这个......
/foo_Java_Home/bin/java -cp ./foo.jar foopackage.main -a '\"/Foo' 'Path/foo.zip\"'
...仍然导致Java将它们视为两个独立的参数(更不用说它无论如何都不能作为单个参数工作)。我已经尝试过使用单引号,双引号和转义单引号/双引号/空格的每种组合和排列我能想到的。有没有办法提供所需的
输出'/Foo Path/foo.zip'
或 “/ Foo Path / foo.zip”
在Bash?就此而言,是否有可能让Bash接受任意字符串文字而不试图在这些情况下向它添加任何内容?转义字符似乎不起作用,因此如果可能的话,这可能是唯一的选择。
提前致谢。
答案 0 :(得分:4)
在命令调用中将变量括在双引号中:
export ArgPath='/Foo Path/foo.zip'
$JAVA_HOME/bin/java -cp ./foo.jar foopackage.main -a "$ArgPath"
请注意,这通常适用于调用任何命令(不仅仅是Java)。如果参数包含空格(等),请将其括在引号(单引号或双引号)中。当参数在变量中时,请使用双引号。