如何增加bash变量中的每个数字
我有一个bash脚本来控制Linux性能。如您所知,perf采用核心列表,可以通过以下三种方式中的一种进行指定如何增加bash变量中的每个数字,bash,scripting,Bash,Scripting,我有一个bash脚本来控制Linux性能。如您所知,perf采用核心列表,可以通过以下三种方式中的一种进行指定 -C1#仅适用于芯1 -C1-4#芯1至4 -C1,3#核心1和3 目前,我有一个环境变量CORENO,它将控制-C$CORENO 但是,我需要用固定偏移量(即2)偏移CORENO 我可以做((CORENO+=2))但这只适用于案例1 是否有Linux/bash技巧允许我对bash变量中的每个数字应用fix offset?请看seq for core in `seq 2 10`; do
是否有Linux/bash技巧允许我对bash变量中的每个数字应用fix offset?请看
seq
for core in `seq 2 10`; do
echo CORENO=$core
done
看看
seq
for core in `seq 2 10`; do
echo CORENO=$core
done
由于您使用的是Linux,下面是一些GNU-sed:
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"
它的工作原理是将所有数字替换为
$((number+2))
,并将结果作为shell命令进行计算。首先应用允许字符的白名单,以避免任何安全问题。由于您使用的是Linux,下面是一些GNU-sed:
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"
它的工作原理是将所有数字替换为
$((number+2))
,并将结果作为shell命令进行计算。首先应用允许字符的白名单,以避免任何安全问题。我对@另一个人基于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
当给定非法参数时,我的函数将打印
错误
。来自@that other guy的答案更自由…我对来自@that other guy的基于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
当给定非法参数时,我的函数将打印
错误
。来自@另一个家伙的那个更自由…这给了我另一个使用sed的实际例子!这给了我另一个使用sed的实际例子!