参数变量未被追加

时间:2017-09-28 17:45:48

标签: bash shell unix siebel

我有一个UNIX shell脚本,我以参数的形式传递值。一切似乎运行良好,但不是一个参数,但我可以看到它用echo命令打印。

脚本 - :

#!/bin/bash

admPath=$1
admdatatype=$2
admeaimethod=$3
admprefix=$4
gatewayname=$5
enterpriseName=$6
userId=$7
password=$8
admFilter=$9

echo "$admPath"
echo "$admdatatype"
echo "$admeaimethod"
echo "$admprefix"
echo "$gatewayname"
echo "$enterpriseName"
echo "$userId"
echo "$password"
echo "$admFilter"


srvrmgr -g "$gatewayname" -e "$enterpriseName" -s gepfdevss -u "$userId" -p "$password" -c "run task for comp ADMBatchProc with admpath="$admPath", admdatatype="$admdatatype", admfilter="'$admFilter'", admeaimethod=$admeaimethod, admprefix="$admprefix"" -b >> exportLOVStatus.out

正如您所看到的,我有一个名为admFilter的参数,其值我想传递为'[List Of Values Parent (UDA).Value]=\"XRX_TEST\"'

当我执行上面的脚本时,我可以看到 echo 结果如下 - :

执行 - :

./exportLOV.sh "/global/u70/globepfdev/ADM" "LOV" "Upsert" "export_ADM" "gateway" "enterpriseserver" "user" "password" \''[List Of Values Parent (UDA).Value]=\"XRX_TEST\"'\'

回声结果 - :

/global/u70/globepfdev/ADM
LOV
Upsert
export_ADM
gateway
enterprise
user
password
'[List Of Values Parent (UDA).Value]=\"XRX_TEST\"'

但是,在成功连接后,为服务器管理器执行命令。此admFilter参数不是读取值。这是run task命令的输出 - :

run task for comp ADMBatchProc with admpath=/global/u70/globepfdev/ADM, admdatatype=LOV, admfilter=$admFilter, admeaimethod=Upsert, admprefix=export_ADM

除了admFilter之外,您可以看到每个其他参数都有与之关联的值。我被困了,因为这可以任何人帮助我。我怎样才能正确传递价值?谢谢

1 个答案:

答案 0 :(得分:3)

单引号可防止扩展变量。你应该将单引号放在双引号字符串中,这样它们就可以直接发送到-c命令,而不是在它之外。

还没有必要在srvrmgr -g "$gatewayname" -e "$enterpriseName" -s gepfdevss -u "$userId" -p "$password" -c "run task for comp ADMBatchProc with admpath=$admPath, admdatatype=$admdatatype, admfilter='$admFilter', admeaimethod=$admeaimethod, admprefix=$admprefix" -b >> exportLOVStatus.out 参数中的每个变量周围结束双引号。

{{1}}

请参阅Difference between single and double quotes in Bash