1

我目前正在尝试制作一个 bash 脚本,该脚本以归档文件的路径作为参数来执行 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 参数不能有空格。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 路径/foo.zip”

在巴什?就此而言,是否有可能让 Bash 接受任意字符串文字,而无需在此类情况下尝试向其添加任何内容?转义字符似乎不起作用,因此如果可能的话,这可能是唯一的选择。

提前致谢。

4

1 回答 1

4

在命令调用中用双引号将变量括起来:

export ArgPath='/Foo Path/foo.zip'

$JAVA_HOME/bin/java -cp ./foo.jar foopackage.main -a "$ArgPath"

请注意,这通常适用于调用任何命令(不仅仅是 Java)。如果参数包含空格(等),请将其括在引号中(单引号或双引号)。当参数在变量中时,使用双引号。

于 2012-08-27T19:19:15.167 回答