gpt4 book ai didi

java - 在 Shell 脚本中使用带空格的路径

转载 作者:行者123 更新时间:2023-12-02 07:20:52 28 4
gpt4 key购买 nike

我正在使用 shell 脚本来调用 java 程序。当调用传递java程序时,我传递-Dargument,它有一个目录的路径。此 -D 参数是从文件中读取的。现在,当该路径包含空格时,我遇到一个问题。我尝试过使用引号和转义引号,但这两种方法都不起作用。

这是我的 shell 脚本代码,test.sh

   D_ARG=`(tr '\r\n' ' ' < argument.dat)
\#executing java code by passing above argument
java ${D_ARG} TestProgram

下面是我的参数文件,argument.dat

  -Dargument1="/Path /To A/File"

当我使用 set -x 设置回显时,我看到 shell 将其转换为

  '-Dargument1="/Path' '/To' 'A/File"'

当遇到空格时它会添加单引号,并且出现“/To”类未找到异常。如何解决这个问题。任何建议或帮助将非常感激。

最佳答案

试试这个:

ARGS=

# Do nothing if there are no spaces; if there are spaces, surround with quotes
for arg in $(perl -pe '/ / or next; s/^/"/; s/$/"/' argument.dat); do
ARGS="$ARGS $arg";
done

java $ARGS TestProgram

这基本上具有这样的效果:每当一行中有空格时,它就会用引号引起来,因此 -Da=b c 将变成 "-Da=b c".

请注意,"-Da=b c" 严格等同于 -Da="b c",甚至是看起来更奇怪的形式:

  • '-Da='b\c;
  • -D"a=b"c;
  • 等等等等

唯一重要的是输入字段分隔符的任何字符都会被转义。是的,这是合法的:

alias l"l=ls"\ -l

关于java - 在 Shell 脚本中使用带空格的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14276961/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com