【问题标题】:How to perform pattern substitution on the keys of a bash associative array如何对 bash 关联数组的键执行模式替换
【发布时间】:2017-08-23 10:35:09
【问题描述】:

我需要对 bash 关联数组的键执行模式替换。示例:

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

要在前加上foo_,可以使用:

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

但是如何给 keys 加上前缀呢?这不起作用(至少在 GNU bash 版本 4.3.30(1)-release 中):

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

有没有比以下解决方法更好的方法?

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

【问题讨论】:

    标签: bash


    【解决方案1】:

    你可以使用printf:

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

    【讨论】:

    • 简洁优雅。我怎么会忘记printf
    • 您的解决方案非常适合添加前缀或后缀等简单替换。您对更复杂的替换有什么建议吗,例如,将 bar_ 前缀替换为 foo_
    • 嗯,替换前缀可能无法一步完成。让我来挖掘一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多