Shell 脚本帮助、变量值替换

问题描述 投票:0回答:1

假设在linux下,shell脚本,我有

WHATIF_POLLING_SCHEDULER="0 * * ? * *"
。 现在我知道了,
ESCAPED_WHATIF_POLLING_SCHEDULER=\"${WHATIF_POLLING_SCHEDULER}\"

CRON1="-Dwhatif.polling.scheduler=$ESCAPED_WHATIF_POLLING_SCHEDULER"

最后,我必须执行

java -jar $MY_JAR
并在其中传递这个 cron 参数。 所以,当我这样做时
java "$CRON1" -jar $MY_JAR
我收到类似“cron 解析器中的值无效”的错误

如果我简单地替换值

java -Dwhatif.polling.scheduler="0 * * ? * *" -jar $MY_JAR
,它就可以正常工作! 我需要在 java 命令中正确传递 CRON1 变量。请帮忙!

linux bash cron sh variable-assignment
1个回答
0
投票

我不确定你想用

ESCAPED_WHATIF_POLLING_SCHEDULER=\"${WHATIF_POLLING_SCHEDULER}\"
做什么。

请注意,

java -Dwhatif.polling.scheduler="0 * * ? * *" -jar "$MY_JAR"
在参数值中并不真正包含引号。引号是 shell 语法的一部分。

从 shell 的角度来看,以下命令 100% 相同:

  • java "-Dwhatif.polling.scheduler=0 * * ? * *" -jar "$MY_JAR"
  • java -D"whatif.polling.scheduler=0 * * ? * *" -jar "$MY_JAR"
  • java -Dwhatif.polling.scheduler=0" ""*"" ""*"" ""?"" ""*"" "*" -jar "$MY_JAR"
  • java -Dwhatif.polling.scheduler=0\ \*\ \*\ \?\ \*\ \* -jar "$MY_JAR"
  • java -Dwhatif.polling.scheduler='0 * * ? * *' -jar "$MY_JAR"
  • java -Dwhatif.polling."scheduler=0 * * ? * *" -jar "$MY_JAR"

因此您执行的命令相当于:

java -Dwhatif.polling.scheduler='"0 * * ? * *"' -jar "$MY_JAR"

你真的想跑步:

WHATIF_POLLING_SCHEDULER='0 * * ? * *'
java -Dwhatif.polling.scheduler="$WHATIF_POLLING_SCHEDULER" -jar "$MY_JAR"

无需在值中嵌入引号,因为引号实际上并不是值的一部分。

© www.soinside.com 2019 - 2024. All rights reserved.