Shell 将字符串解析为标记,导出并动态回显值
环境:科恩希尔(ksh) 我使用以下方法导出变量: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
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