我只是想知道如何从 shell 脚本中的变量中提取值。以下是代码:
var=Volume: 0: 100% 1: 100%
或者
var=Volume: 0: 35% 1: 35%
我想从变量中提取 100 或 35 个依赖值并将其存储到另一个变量中。所以我该怎么做呢?
答案1
我认为你的目标有点误导,所以我做了我希望做的事情,将值分成单独的值。
var="Volume: 0: 70% 1: 12%"
source <(echo "$var" | grep -oP '\d+\: \d+' | sed -r 's/([0-9]+)\: /vol\1=/g')
因此,对于每个输入量,都会vol#
创建一个变量。在上面的例子中,echo $vol1
将是70
,并且echo $vol2
给出12
。
如果var="Volume: 0: 70% 1: 12% 2: 12% 3: 41% 4: 19%"
,你最终会得到五个独立的变量。
答案2
我认为这就是你要找的命令,
sed 's/.*\ \(.*\)%.*/\1/g'
例子:
$ echo 'var=Volume: 0: 35% 1: 35%' | sed 's/.*\ \(.*\)%.*/\1/g'
35
$ echo 'Volume: 0: 35% 1: 35%' | sed 's/.*\ \(.*\)%.*/\1/g'
35
$ var="Volume: 0: 35% 1: 35%"
$ echo $var | sed 's/.*\ \(.*\)%.*/\1/g'
35
此命令将显示第一个数字35
或100
第一个 % 标记之前的数字。
答案3
如果:
var="Volume: 0: 100% 1: 100%"
然后:
首先提取
100
你可以使用:temp=$(awk -F": |%" '{print $3}' <<< "$var")
最后提取
100
可以使用:temp=$(awk -F": |%" '{print $5}' <<< "$var")
要提取两者,
100
您可以使用:temp=$(awk -F": |%" '{print $3, $5}' <<< "$var")