これは ksh93 で機能しますが、ksh88 で同様のコードを作成するにはどうすればよいですか?
$ typeset -A age
$ age["bob"]=42
$ age["alice"]=31
$ print ${age[bob]}
42
これは ksh93 で機能しますが、ksh88 で同様のコードを作成するにはどうすればよいですか?
$ typeset -A age
$ age["bob"]=42
$ age["alice"]=31
$ print ${age[bob]}
42
簡単な答え: できません。ksh88 は連想配列を処理しません。
より長い答え:それはあなたが何をしようとしているのかによって異なります。次の回避策は機能するはずですが、シナリオには適していない可能性があります。
integer bob=0
integer alice=1
age[bob]=42
age[alice]=31
assoc を実装していないシェルをハックすることができます。配列 (たとえば、eval を使用) ですが、きれいでも高速でもありません。
実際、ksh88 は連想配列をサポートしていません。
awk スクリプトのラッパーとして ksh88 を使用します。
awk 'BEGIN {
age["bob"]=42
age["alice"]=31
print age["bob"]
}'
42
ksh88 をホストし、ksh93 をホストしないシステムには、マッピングをサポートする他の言語がある場合があります。