2017-02-01 1 views
0

'-Dmyprop = abc $ 354' est évalué à -Dmyprop = abc54 même s'il est présent dans des guillemets simples. Y a-t-il un moyen de contourner ceci?

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

+2

Pourquoi utilisez-vous 'eval' du tout? – chepner

+1

Avez-vous vraiment besoin d'un 'eval' ici? – codeforester

+0

Les guillemets simples n'existent que jusqu'à ce que le shell ait évalué les arguments de 'eval'; 'eval' lui-même ne les voit pas. – chepner

Répondre

1

réponse courte: vous devez échapper avec \ et ouvrir/fermer "ajouter ""

guillemets simples sont littéralement à la différence de doubles. exemple d'évasion: fermer ', ouvrir ", fermer", ouvrir à nouveau singles. De cette façon, vous pouvez interpoler ou échapper à ce dont vous avez besoin dans une chaîne de singles. C'est frustrant. voici un exemple:

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