Shell脚本语法-在行尾添加引号

oxcyiej7  于 2022-12-23  发布在  Shell
关注(0)|答案(2)|浏览(156)

我有下面的脚本给我语法错误,如果我添加单引号在行尾,我正在分配java vm参数。为什么这个语法是错误的?

#!/bin/bash

#Incorrect

JVM_OPTS='-XX:+UseG1GC -Xms250M -Xmx250M -Xss1M  -DVAR1='"$VALUE1"' -DVAR2='"$VALUE2"'
START_CMD="java ${JVM_OPTS} ${JVM_ARGS} -jar ${1}"
$START_CMD

#!/bin/bash

#Correct

JVM_OPTS='-XX:+UseG1GC -Xms250M -Xmx250M -Xss1M  -DVAR1='"$VALUE1"' -DVAR2='"$VALUE2"
START_CMD="java ${JVM_OPTS} ${JVM_ARGS} -jar ${1}"
$START_CMD
h9vpoimq

h9vpoimq1#

您应该使用数组(和/或函数)

JVM_OPTS=(-XX:+UseG1GC -Xms250M -Xmx250M -Xss1M  -DVAR1="$VALUE1" -DVAR2="$VALUE2")
JVM_ARGS=(...)

start_cmd () {
    java "${JVM_OPTS[@]}" "${JVM_ARGS[@]}" -jar "$1"
}

start_cmd "$1"
3df52oht

3df52oht2#

让我们匹配开始和结束引号:

JVM_OPTS='-XX:+UseG1GC -Xms250M -Xmx250M -Xss1M  -DVAR1='"$VALUE1"' -DVAR2='"$VALUE2"'
#        \............................................../\......./\......../\......./^

您的报价不匹配。
但是使用@chepner的建议,将命令构建成单个字符串肯定会失败。

相关问题