Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bashshell变量替换问题_Bash_Shell - Fatal编程技术网

bashshell变量替换问题

bashshell变量替换问题,bash,shell,Bash,Shell,我在BASH中定义了一个要替换的变量,如下所示 EXPORT_FLT_2="<ngc_filter_configuration><ngc_filters><ngc_filter>ngc_filter_operator operator='and'><ngc_filter_term type='ip' value='192.168.175.99'/><ngc_filter_term type='ip' value='72.32.127

我在BASH中定义了一个要替换的变量,如下所示

EXPORT_FLT_2="<ngc_filter_configuration><ngc_filters><ngc_filter>ngc_filter_operator   operator='and'><ngc_filter_term type='ip' value='192.168.175.99'/><ngc_filter_term type='ip' value='72.32.127.138'/></ngc_filter_operator></ngc_filter></ngc_filters></ngc_filter_configuration>";
exportcli.cfg文件中定义了除“$1”之外正在使用的所有变量 现在,在执行如下脚本之后

$./export.sh "$EXPORT_FLT_2"

除了实际替换变量,我看不到传递任何参数。我是不是遗漏了什么

我无法立即发现这里的错误,但我会尝试一下

1:在shell中运行
echo$EXPORT\u FLT\u 2
,确认您定义的变量已实际定义

2:依次在export.sh脚本的各个点粘贴
echo$1
,从顶部开始。查看变量是否在某个地方损坏

3:运行
sh-xexport.sh“$export\u FLT\u 2”
查看脚本在每个步骤上实际执行的内容

这将有助于更准确地查明发生了什么以及错误的来源

更新

EXPORT_FLT_2变量似乎是在配置文件中定义的,而不是在shell中定义的。尝试将脚本中的
$1
更改为
${!1}
,并将脚本作为

$ ./export.sh EXPORT_FLT_2

(注意,变量名上没有$decoration)。

这很奇怪。您可以在开头打印$1和/或使用
sh-x
执行shell脚本吗?这将给您提示。您如何知道没有传递任何参数?你收到错误信息了吗?那样的话,你能把它寄出去吗?如果您的exportcli程序试图在stdout而不是stderr上报告错误,您可以删除>/dev/null吗?使用
-x
我得到以下结果
++/mnt/.kumara/automation/exportcli.cfg+++TFA_ST=1312464957000…+++EXPORT_FLT_2=''++echo
但是
echo$1
会产生一个空白如果你在你的主要帖子下面使用“编辑”按钮会更好,这样比评论的格式更好。你能用这个输出更新你的问题,并把它放在一个代码块中吗?这将使它更容易阅读。但是如果我正确地分析它,那么EXPORT_FLT_2似乎是在exportcli.cfg文件中定义的,正如@qiaomuf和我在他的回答中提到的。我尝试使用了你在回答中提到的所有调试技巧。然而,即使很难,我也能看到变量实际上是在
-x
中定义的,当我运行
sh-x$./export.sh“$export\u FLT\u 2”
时,
echo$1
结果是一个空白。我猜exportcli.cfg文件中的定义可能存在某种错误…但不确定:(
++./mnt/.kumara/automation/exportcli.cfg++TFA_ST=1312464957000…++EXPORT_FLT_2=''++echo
看到我的答案的更新了吗?EXPORT_FTL_2显然没有在启动EXPORT.sh脚本的shell中定义。因此,在命令行上粘贴$EXPORT_FTL__2将其扩展为“”在脚本启动之前,$1将为空。在命令行中使用EXPORT_FTL_2,但不使用$,并在脚本中使用${!1}技巧告诉bash存在一定程度的间接寻址。
$ ./export.sh EXPORT_FLT_2