0

环境:KornShell (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
4

1 回答 1

1

您执行替换的方式会丢弃换行符。所以括号内的输出如下所示:

echo $EffTimeStamp
echo $InputCtxNm
echo $RunType

但是当你将它传递给 eval aseval $(...)时,你有效地得到:

echo $EffTimeStamp echo $InputCtxNm echo $RunType

...希望这可以清楚地表明 extraecho的来源。如果你只是在每一行的末尾添加一个分号来标记一个显式的命令结束,它应该做你想要的:

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
于 2012-05-07T19:36:24.140 回答