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に渡すとeval $(...)、効果的に次のようになります。

echo $EffTimeStamp echo $InputCtxNm echo $RunType

echo...これにより、余分なものがどこから来ているのかが明らかになることを願っています。明示的なコマンドの終わりを示すために各行の終わりにセミコロンを追加するだけの場合、それはあなたが望むことをするはずです:

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 に答える