あなたが探しているものは、「連想配列」と呼ばれ、Perl では「ハッシュ」、または「キー値ストア」または「辞書ルックアップ」とも呼ばれます。Bourne シェルはそれらを直接サポートしていません。Awk、Perl、Bash にはすべて連想配列があります。bourne シェルで連想配列をハッキングする方法はいくつかありますが、それらは醜いものです。あなたの最善の策は、a)当面のタスクにより適した言語を選択するか、b)ボーンシェルを使用する必要がある場合は、連想配列の周りにラッパー関数をより機能的な言語で記述します(これは本質的にsudo_Oがsedで行っていることです)。
#! /bin/sh
lookup() {
perl -e '%hash = ( "key1" => "hello", "key2" => "val2", "key3" => "val3" );
print $hash{ $ARGV[0] }
' $1
}
x=$(lookup "key1")
echo $x
これは純粋な bourne シェルよりも移植性が低くなりますが、perl を使用できる場合は、はるかに簡単な方法です。
ラッパーで使用する perl がない場合、最善の策は awk です。これは基本的に、sed を備えたすべてのマシンで利用可能であり、連想配列に対するファースト クラスのサポートを備えています。