我目前正在尝试制作一个 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 接受任意字符串文字,而无需在此类情况下尝试向其添加任何内容?转义字符似乎不起作用,因此如果可能的话,这可能是唯一的选择。
提前致谢。