关于unix:将字段分配给变量 – Bash

Assign fields to variables - Bash

本问题已经有最佳答案,请猛点这里访问。

假设我有一个带管道分隔符的字符串:

1
str="1|2|3|4"

我想把它们分配给特定的变量。

1
2
3
4
var_a=1
var_b=2
var_c=3
var_d=4

我是这样做的:

1
2
3
4
var_a="`echo $str | cut -d'|' -f1`"
var_b="`echo $str | cut -d'|' -f2`"
var_c="`echo $str | cut -d'|' -f3`"
var_d="`echo $str | cut -d'|' -f4`"

这能有效地做到吗?请建议。


最好使用数组存储单个分隔值:

1
2
3
4
5
str="1|2|3|4"
IFS='|' read -ra arr <<<"$str"

#examine array values
declare -p arr
1
declare -a arr='([0]="1" [1]="2" [2]="3" [3]="4")'

要循环遍历数组,请使用:

1
for i in"${arr[@]}"; do echo"$i"; done
1
2
3
4
1
2
3
4


1
IFS='|' read -r var_a var_b var_c var_d rest <<<"$str"

rest是一个变量,如果存在其他变量,则在前四个变量之后会有更多的列。如果您只想丢弃它们,用于占位符变量的常规名称是_

这在bashfaq 1中有详细介绍:如何逐行(和/或逐字段)读取文件(数据流、变量)?