【发布时间】:2017-10-31 01:08:08
【问题描述】:
我们正在尝试将带有单引号和双引号的参数传递给 shell 脚本并使用此参数执行。在 echo 它的打印正确但是对于我们得到的命令是“未终止的引用值”
请看脚本和参数传递方法:
[root@geopc]/root# ./myscript.sh 'localhost:9199/jmxrmi -O java.lang:type=GarbageCollector,name="PS MarkSweep" -A CollectionCount -K duration'
#!/bin/bash
out=`/usr/lib64/nagios/plugins/check_jmx -U service:jmx:rmi:///jndi/rmi://$1`
echo $1
echo $out
执行后我们得到的输出为
$1 : localhost:9199/jmxrmi -O java.lang:type=GarbageCollector,name="PS MarkSweep" -A CollectionCount -K duration
$out : JMX CRITICAL 未终止的引用值
在 Shell Script 中,我们硬编码 $1 的值,然后执行我们得到正确的结果。
我们尝试如下传递参数:
./myscript.sh 'localhost:9199/jmxrmi -O java.lang:type=GarbageCollector,name=\"PS MarkSweep\" -A CollectionCount -K duration'
在这种情况下,错误是:JMX CRITICAL Invalid character '"' in value part of property
./myscript.sh 'localhost:9199/jmxrmi -O java.lang:type=GarbageCollector,name="\"PS MarkSweep\"" -A CollectionCount -K duration'
在这种情况下,错误是 JMX CRITICAL 未终止的引用值
所以请任何人帮助我。
【问题讨论】:
-
您是否尝试过作为单个参数传递并在调用中使用 $@ 或 $*?
-
问题不在于传递参数,而是在脚本内部正确解释该参数。 Bash FAQ 50 在某种程度上涵盖了您在脚本中尝试执行的操作。