【问题标题】:eval - How to skip $ character enclosed in single quotes from being evaluatedeval - 如何跳过被单引号括起来的 $ 字符被评估
【发布时间】:2017-02-01 17:42:34
【问题描述】:

'-Dmyprop=abc$354' 被评估为 -Dmyprop=abc54,即使它出现在单引号中。有没有办法解决这个问题?

eval exec '"/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java"' '"-Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties"' -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager '-Dmyprop=abc$354' -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources '-Djava.endorsed.dirs="/usr/local/tomcat/endorsed"' -classpath '"/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar"' '-Dcatalina.base="/usr/local/tomcat"' '-Dcatalina.home="/usr/local/tomcat"' '-Djava.io.tmpdir="/usr/local/tomcat/temp"' org.apache.catalina.startup.Bootstrap start

exec /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Dmyprop=abc54 -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

【问题讨论】:

  • 你为什么要使用eval?
  • 你真的需要eval吗?
  • 单引号仅在 shell 评估 eval 的参数之前存在; eval 本身看不到它们。
  • @chepner 这个 sn-p 来自 tomcat bin/catalina.sh。无法改变

标签: bash tomcat escaping quotes


【解决方案1】:

简短回答: 你必须用 \ 转义它并打开/关闭'添加“”

单引号与双引号不同。逃生的例子: 关闭',打开“,关闭”,再次打开单曲。通过这种方式,您可以在单曲字符串中插入或转义您需要的内容。它令人沮丧。这是一个例子:

    tempSample=$(awk  'BEGIN { rounded = sprintf("%.0f", '"$((size1/div))"'); print rounded }')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多