将值存储在单独的bash变量中的最有效方法

时间:2018-01-24 01:05:35

标签: bash shell scripting

我想知道在单独的变量中将值存储在不同列中的最有效方法是什么

这就是我现在所做的,但我不确定是否有更好的解决方案:

ITEM="5.8  1.4 2345 user123 23:27 vim test.c"
CPU="$(echo "$ITEM" | awk '{print $1}')"
MEM="$(echo "$ITEM" | awk '{print $2}')"
PID="$(echo "$ITEM" | awk '{print $3}')"
USER="$(echo "$ITEM" | awk '{print $4}')"
TIME="$(echo "$ITEM" | awk '{print $5}')"
ARGS="$(echo "$ITEM" | awk '{ for(i=6;i<=NF;++i) printf("%s ", $i) }')"

2 个答案:

答案 0 :(得分:3)

没有必要创建这么多变量,我相信这就是为什么阵列在使用中,尝试:

ITEM="5.8  1.4 2345 user123 23:27 vim test.c"
arr=($ITEM)

要访问此阵列中的项目,您可以使用:

CPU="${arr[0]}"
echo "$CPU"
5.8
MEM="${arr[1]}"
echo "$MEM"
1.4
PID="${arr[2]}"
echo "$PID"
2345
USER="${arr[3]}"
echo "$USER"
user123
TIME="${arr[4]}"
echo "TIME"
TIME
ARGS="${arr[@]:5}"
echo "$ARGS"
vim test.c

编辑: 此处也添加read解决方案。

read -a arr <<<"$ITEM"

答案 1 :(得分:3)

阵列是自然的选择。所有大写名称都保留给shell,因此最好坚持使用小写。

items=(5.8  1.4 2345 user123 23:27 vim test.c)

cpu=${items[0]}
mem=${items[1]}
pid=${items[2]}
user=${items[3]}
time=${items[4]}
args=${items[@]:5}

如果您从字符串开始,则可以使用read轻松地将项目存储到多个变量中。

read -r cpu mem pid user time args <<< "5.8  1.4 2345 user123 23:27 vim test.c"