我有一个bash脚本来控制Linux。如您所知,perf采用三种方法中的一种方式指定的核心列表。
目前,我有一个环境变量CORENO,它将控制-C$CORENO。
然而,我需要用一个修正偏移量来抵消CORENO (I.e.2)
我可以做((CORENO+=2)),但这只适用于案例1。
是否有Linux/bash技巧允许我对bash变量中的每个数字应用修复偏移量?
发布于 2016-12-28 01:15:48
既然您是在Linux上,下面是一些GNU:
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"它将输出:
3
3-6
5,6,7它的工作方式是用$((number+2))替换所有数字,并将结果计算为一个shell命令。首先应用允许字符的白名单,以避免任何安全问题。
发布于 2016-12-28 01:04:47
看看seq
for core in `seq 2 10`; do
echo CORENO=$core
done发布于 2016-12-28 01:33:03
我已经推翻了来自@那个其他人的基于sed的答案,因为我比我更喜欢它,它是一个“纯bash”解决方案,由一个递归函数组成。
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。另一个人更自由..。
https://stackoverflow.com/questions/41353834
复制相似问题