2017-08-23 22 views
1

bash連想配列のキーに対してパターン置換を実行する必要があります。例:foo_bash連想配列のキーでパターン置換を実行する方法

$ declare -A aa=([A]=0 [B]=1 [C]=2) 

をプレフィックスに1を使用することができます。

$ echo --${aa[@]/#/foo_}-- 
--foo_0 foo_1 foo_2-- 

しかし、どのようにキーを接頭辞には?

$ echo --${!aa[@]/#/foo_}-- # <- does not work 
---- 

は次の回避策より良い方法があります:これは(バージョン4.3.30(1)-release、少なくともGNUのbashで)動作しませんか?

$ declare -a keys=(${!aa[@]}) 
$ echo --${keys[@]/#/foo_}-- 
--foo_A foo_B foo_C-- 

答えて

1

あなたはprintfを使用することができます。

printf 'foo_%s\n' "${!aa[@]}" 

foo_A 
foo_B 
foo_C 
+1

シンプルでエレガント。どうすれば 'printf'を忘れることができますか? –

+0

あなたのソリューションは、接頭辞または接尾辞の追加などの単純な置換に最適です。たとえば、 'bar_'という接頭辞を' foo_'で置き換えるなど、より複雑な置換を提案していますか? –

+0

接頭辞を置き換えることは、1つのステップでは不可能かもしれません。私はいくつかの掘削をさせてください。 – anubhava

関連する問題