bash数组的前缀和后缀元素

 他像强盗霸占了d我的心 发布于 2023-02-13 07:28

我想在bash中预先修复一个数组,类似于大括号扩展.

说我有一个bash数组

ARRAY=( one two three )

我想能够像下面的大括号扩展一样预先修改它

echo prefix_{one,two,three}_suffix

我能找到的最好用的是使用bash regex来添加前缀或后缀

echo ${ARRAY[@]/#/prefix_}
echo ${ARRAY[@]/%/_suffix}

但我找不到任何关于如何同时做两件事的事情.我可能会使用正则表达式捕获并执行类似的操作

echo ${ARRAY[@]/.*/prefix_$1_suffix}

但似乎bash变量正则表达式替换中不支持捕获.我还可以存储一个临时数组变量

PRE=(${ARRAY[@]/#/prefix_})
echo ${PRE[@]/%/_suffix}

这可能是我能想到的最好的,但它似乎仍然低于标准杆.最后一种选择是使用类似于的for循环

EXPANDED=""
for E in ${ARRAY[@]}; do
    EXPANDED="prefix_${E}_suffix $EXPANDED"
done
echo $EXPANDED

但这太丑了.如果我想要前缀后缀或数组元素的空格,我也不知道如何让它工作.

2 个回答
  • Bash大括号扩展不使用正则表达式.使用的模式只是一些shell glob,你可以在bash手册3.5.8.1模式匹配中找到它.

    你的两步解决方案很酷,但它需要一些空白安全的引用:

    ARR_PRE=("${ARRAY[@]/#/prefix_}")
    echo "${ARR_PRE[@]/%/_suffix}"
    

    你也可以用邪恶的方式做到这一点:

    eval "something $(printf 'pre_%q_suf ' "${ARRAY[@]}")"
    

    2023-02-13 07:47 回答
  • 您的上一个循环可以通过以空格友好的方式完成:

    EXPANDED=()
    for E in "${ARRAY[@]}"; do
        EXPANDED+=("prefix_${E}_suffix")
    done
    echo "${EXPANDED[@]}"
    

    2023-02-13 07:50 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有