Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Shell 将字符串解析为标记,导出并动态回显值_Shell_Unix_Scripting_Ksh_Shellexecute - Fatal编程技术网

Shell 将字符串解析为标记,导出并动态回显值

Shell 将字符串解析为标记,导出并动态回显值,shell,unix,scripting,ksh,shellexecute,Shell,Unix,Scripting,Ksh,Shellexecute,环境:科恩希尔(ksh) 我使用以下方法导出变量: eval $(echo '"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD"' | sed 's/^"/export /g;s/=/="/g;s/#/"\nexport /g') 并尝试动态显示这些变量的值: eval $(echo EffTimeStamp=20110203-210000#InputCtxNm=Forigen Excha

环境:科恩希尔(ksh)

我使用以下方法导出变量:

eval $(echo '"EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD"' |  
sed 's/^"/export /g;s/=/="/g;s/#/"\nexport /g')
并尝试动态显示这些变量的值:

eval $(echo EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD|sed 's/^/echo $/g;s/=/="/g;s/#/"\necho $/g' | sed  's/=.*$//g')
但我得到的结果是:

20110203-210000 echo Forigen Exchange Today echo EOD
我不明白为什么会有额外的回波显示在里面,这不是一个令人满意的输出。它应该如下所示:

20110203-210000 
Forigen Exchange Today 
EOD

执行替换的方式会丢弃换行符。因此,括号内内容的输出如下所示:

echo $EffTimeStamp
echo $InputCtxNm
echo $RunType
但当您将其作为
eval$(…)
传递给eval时,您实际上得到:

echo $EffTimeStamp echo $InputCtxNm echo $RunType
…希望这能让我们清楚地知道额外的
回音是从哪里来的。如果您只是在每行末尾添加分号以标记命令的显式结束,它应该执行您想要的操作:

eval $(echo EffTimeStamp=20110203-210000#InputCtxNm=Forigen Exchange Today#RunType=EOD|sed 's/^/echo $/g;s/=/="/g;s/#/"\necho $/g' | sed  's/=.*$/;/g')
其输出为:

20110203-210000
Forigen Exchange Today
EOD