gpt4 book ai didi

bash - 将 bash 参数列表转换为带引号的单个字符串

转载 作者:行者123 更新时间:2023-11-29 09:26:18 25 4
gpt4 key购买 nike

我正在尝试使用 exec 插件创建一个简单的 bash 脚本来运行带有一些特定参数和“子”参数的 mvn 命令。看起来很简单,但我在达到预期效果时遇到了问题:

这里是要运行的命令:

mvn exec:java -Dexec.args="-a val1 -b val2 -c val3"

像这样运行时它工作正常,但我想将它包装在 bash 脚本中,以便于所有人运行:

myapp -a val1 -b val2 -c val3

脚本会很简单:

mvn exec:java -Dexec.args="$@"

但是 "$@"并没有使它成为一个单引号的值,所以我试着用引号引起来:

mvn exec:java -Dexec.args=\""$@"\"

我还尝试了第二个脚本,我称之为 quoter:

./myapp \""$@"\"

这也不行,好好组合玩了一段时间,感觉不管我引用多少次,它还是把它当作一个参数列表,是第一个元素"-a,然后是第二个元素 val1,然后是第三个元素 -b,依此类推。

奇怪的是,如果我不在引用脚本中引用参数,而是像这样运行它:

./quoter "-a val1 -b val2 -c val3"

它工作正常,它作为单个参数传递给第二个脚本,然后传递给执行 maven 命令的第一个脚本。

看起来,"$@"不完全是由所有参数的字符串连接组成的字符串(如果您考虑一下,这很酷),也不像是将其转换为一个字符串(不酷)。有没有办法让这成为可能?

PS:是的,我正在尝试将选项传递给主程序,这是一个高度依赖的 spring 独立应用程序。

最佳答案

man bash...

Special Parameters
The shell treats several parameters specially. These parameters may only be
referenced; assignment to them is not allowed.
* Expands to the positional parameters, starting from one. When the expansion
occurs within double quotes, it expands to a single word with the value of
each parameter separated by the first character of the IFS special variable.
That is, "$*" is equivalent to "$1c$2c...", where c is the first character
of the value of the IFS variable. If IFS is unset, the parameters are
separated by spaces. If IFS is null, the parameters are joined without
intervening separators.

关于bash - 将 bash 参数列表转换为带引号的单个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20913623/

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