我删除了括号,但仍然无法在第二个函数<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="tagContainer">
<a class="a1" onmouseover="mouseoverbox1(this)">Color</a>
<a class="a1" onmouseover="mouseoverbox1(this)">Names</a>
<a class="a1" onmouseover="mouseoverbox1(this)">Places</a>
</div>
中获取ENV_NODE
值。请告诉我有什么问题。
scpTAR
答案 0 :(得分:3)
如@cyrus所述,默认情况下变量是全局变量。您所做的是在subshell中设置变量:
( ENV_NAME=it && ENV_NODE=xyx && ENV_WLS_DOMAIN=user1 && ENV_NODE_PATH=path )
因此,一旦子shell存在,这些就会消失(不会传播到调用脚本的环境)。这就是为什么你没有在scpTAR
函数中看到它们的值设置的原因。删除括号,您的代码应该开始工作。
<强>更新强>
您的代码的更新版本(基于itChi的答案)有另一个重大错误。设置TARGET_ENVIRONMENT = it
时,在赋值运算符周围放置空格。此语法无效,因此TARGET_ENVIRONMENT
未分配指定的值,因此evaluateEnvProp
函数内的条件计算结果为false,并且未设置ENV_NODE
变量。删除空格应该可以解决问题。您也没有按照@ itChi的回复更新中的指示致电evaluateEnvProp
。
我强烈建议您开始使用ShellCheck来验证脚本的正确性。
答案 1 :(得分:0)
如前所述,默认情况下变量是全局变量,因此如果您在scpTAR
函数中引用变量,则会得到返回值。
但是,作为第二种方法,如果您愿意,可以像这样引用它:
scpTAR $ENV_NAME $ENV_NODE $ENV_WLS_DOMAIN $ENV_NODE_PATH
然后在你的scpTAR函数中将它们引用为:
echo "$1 $2 $3 $4"
it xyx user1 path
如果您希望在另一台计算机上运行代码,运行远程脚本或将脚本设置为从bash传递变量作为参数,则特别有用。
编辑:
对不起,如果我踩到某人的脚趾,但这是你的答案没有子壳:
evalEnvProp(){
if [ ${TARGET_ENVIRONMENT} = "it" ]; then
ENV_NAME=it
ENV_NODE=xyx
ENV_WLS_DOMAIN=user1
ENV_NODE_PATH=path
fi
}
scpTAR() {
echo $ENV_NODE_PATH
}
main(){
evalEnvProp
scpTAR
}
main
UPDATE2:
#!/bin/bash
set -x
MASTER_HOSTNAME=`hostname | cut -d . -f1`
TARGET_ENVIRONMENT=it
evaluateEnvProp(){
if [ ${TARGET_ENVIRONMENT} = "it" ]; then
ENV_NAME=it && ENV_NODE=1cf62108e084
fi
}
scpTAR() {
echo ENV_NODE
echo ${ENV_NODE}
if [ ENV_NODE == ${MASTER_HOSTNAME} ] ; then
echo "scpTAR ENV_NODE = ${MASTER_HOSTNAME} " else
"echo 'scpTAR ssh other node than jenkins server >ENV_NODE=${MASTER_HOSTNAME}'"
fi
}
main(){
evaluateEnvProp
scpTAR
}
main
MASTER_HOSTNAME
需要``命令。你打电话给hostname
。您也可以使用$()
=
符号任意一侧的IF语句中的间距。否则你没有评估,你是setting
变量。evaluateEnvProp
的函数调用,但由于您没有设置变量,因此失败了。