名前と値のペアで構成されるファイルを処理するための KSH スクリプトを作成しようとしています。
形式は次のとおりです。
NAME1 VALUE1,NAME2 VALUE2,NAME3 VALUE3, etc
私が書くとしましょう:
read l
IFS=","
set -A nvls $l
echo "$nvls[2]"
これにより、2 番目の名前と値のペアが簡単に得られます。ここで、値にカンマを含めることができるようにタスクが拡張されたとします。次のようにエスケープする必要があります。
NAME1 VALUE1,NAME2 VALUE2_1\,VALUE2_2,NAME3 VALUE3, etc
「読み取り」はすべての引用符を取り除き、配列の2番目の要素は「NAME2 VALUE2_1」になるため、明らかに、私のコードは機能しなくなりました。
「読み取り -A 配列」を持たない古い ksh で立ち往生しています。「read -r」と「eval set -A ....」でさまざまなトリックを試しましたが、役に立ちませんでした。「read nvl1 nvl2 nvl3」を使用して読み取り内でアンエスケープと分割を行うことはできません。これは、各行に名前と値のペアがいくつあるかを事前に知らないためです。
誰かが私のために役立つトリックを持っていますか?
PS Perl、Python、さらには awk でこれを行ったことがあることを知っています。ただし、kshで実行する必要があります(...または試してみてください;)