我正在尝试 grep 所有负载平均值并将它们放入一个数组中。确切的方法应该是什么,请记住以下要求。
定义数组:
LA= ("one" "five" "fifteen")
LA= (`(uptime | grep -o '[0-9]\+\.[0-9]\+*')`)
但该uptime | grep -o '[0-9]\+\.[0-9]\+*'
命令给出的输出如下:
3.08
3.49
3.61
要求: 1. 不应有换行符,以便平均值以空格分隔并适合数组语法。
仅小数点之前的值被发送到输出或数组变量。
答案1
填充数组时换行不是问题。 To bash
,它们只是此上下文中的另一个单词分隔符。
您的命令LA= ((uptime | grep -o '[0-9]\+\.[0-9]\+*'))
有两个错误:
后面的空格
=
。这是有效的语法,但没有达到您可能期望的效果。它不是将该行的其余部分的值分配给
$LA
,而是设置$LA
为空字符串,然后运行该行的其余部分。这是一个有用的功能暂时地覆盖导出的值环境运行特定命令之前的变量。命令退出后,变量的原始值就会恢复。例如
$ VISUAL=/usr/bin/joe sensible-editor myfile.txt .... (exit joe) $ echo $VISUAL /usr/bin/vi
$
第二个之前缺少 a(
。没有$
,你的命令不是命令替换,它是带有虚假操作数和运算符的 shell 算术。
试试这个:
$ LA=($(uptime | grep -Eo '[0-9]+\.[0-9]+'))
$ typeset -p LA
declare -a LA=([0]="0.97" [1]="1.23" [2]="1.39")