首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何增加bash变量中的每个数字

如何增加bash变量中的每个数字
EN

Stack Overflow用户
提问于 2016-12-28 00:23:05
回答 3查看 206关注 0票数 0

我有一个bash脚本来控制Linux。如您所知,perf采用三种方法中的一种方式指定的核心列表。

  1. 仅限-C1 #核心1
  2. -C1-4 #核心1至4
  3. -C1,3 #核心1和3

目前,我有一个环境变量CORENO,它将控制-C$CORENO。

然而,我需要用一个修正偏移量来抵消CORENO (I.e.2)

我可以做((CORENO+=2)),但这只适用于案例1。

是否有Linux/bash技巧允许我对bash变量中的每个数字应用修复偏移量?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-28 01:15:48

既然您是在Linux上,下面是一些GNU:

代码语言:javascript
复制
addtwo() {
  sed -re 's/[^0-9,-]//g; s/[0-9]+/$((\0+2))/g; s/^/echo /e;' <<< "$1"
}

addtwo "1"
addtwo "1-4"
addtwo "3,4,5"

它将输出:

代码语言:javascript
复制
3
3-6
5,6,7

它的工作方式是用$((number+2))替换所有数字,并将结果计算为一个shell命令。首先应用允许字符的白名单,以避免任何安全问题。

票数 2
EN

Stack Overflow用户

发布于 2016-12-28 01:04:47

看看seq

代码语言:javascript
复制
for core in `seq 2 10`; do
  echo CORENO=$core
done
票数 1
EN

Stack Overflow用户

发布于 2016-12-28 01:33:03

我已经推翻了来自@那个其他人的基于sed的答案,因为我比我更喜欢它,它是一个“纯bash”解决方案,由一个递归函数组成。

代码语言:javascript
复制
function increment () {
    local current="$1" n=$(($2))
    if [[ "$current" =~ ^[0-9]+$ ]]; then
        echo $((current+n))
    elif [[ $current == *,* ]]; then
        echo $(increment ${current%%,*} $n),$(increment ${current#*,} $n)
    elif [[ $current == *-*-* ]]; then
        echo ERROR
    elif [[ $current == *-* ]]; then
        echo $(increment ${current%-*} $n)-$(increment ${current#*-} $n)
    else
        echo ERROR
    fi
}

CORENO=3-5
CORENO=$(increment $CORENO 2)
echo $CORENO

increment 3-5,6-8 3

当给出一个非法的参数时,我的函数将打印ERROR。另一个人更自由..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41353834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档