2016-10-12 5 views
1

kshからfishに移行しています。私は、連想配列、ハッシュテーブル、辞書、またはあなたがそれを呼び出すことを望むものを定義する能力が不足していることを発見しています。いくつかの例は、fish shell ---ハッシュテーブル、連想配列、またはキー値ストアをシミュレートまたは実装する方法

set dictionary$key $value eval echo '$'dictionary$key

のようにシミュレートすることができる。しかし、このアプローチは大きく制限されています。たとえば、$keyには、文字、数字、および下線のみを使用できます。

私はfishアプローチは1が利用可能なときに外部コマンドを見つけることであることを理解し、それが「ユニバーサル」スコープに私を制限するので、私は、でも/run/user/<uid>で、ファイルシステム内のキーと値の情報を格納するために少し消極的です。

fishプログラマーはキー値ストアの不足を回避する方法を教えてください。私はちょうど行方不明のいくつかの簡単なアプローチはありますか?

私が解決したい問題の例を次に示します。特定のディレクトリがprompt_pwdを使わずに特殊な略語を使用して印刷するように、fish_prompt関数を修正したいと思います。私は確かにswitchコマンドでこれを行うことができましたが、私は多くの場合汎用の辞書を持っているので、ディレクトリを検索して省略形があるかどうかを調べることができます。次に、関数を編集するのではなく、setを使用して略語を変更することができました。

+1

問題#390(https://github.com/fish-shell/fish-shell/issues/390)でリクエストされています。そのような時間が実現するまでは、以下のfahoで提供されるようなソリューションを使用して不足をハックするさまざまな方法があります。 –

答えて

5

あなたは他の中で一つの変数と値のキーを格納して、対応する値を取得するために

if set -l index (contains -i -- foo $keys) # `set` won't modify $status, so this succeeds if `contains` succeeds 
    echo $values[$index] 
end 

のようなものを使用することができます。

他の可能性として、キーと値を1つの変数に入れ替えることができますが、これは反復処理が苦痛であり、特に組み込み関数を使用する場合には苦痛です。または、区切り文字を使用してキーと値のペアを1つの要素として格納することもできますが、変数には\ 0(パスの唯一可能な区切り文字)を含めることができないため、ディレクトリでは機能しません。

関連する問題