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" |
这在bashfaq 1中有详细介绍:如何逐行(和/或逐字段)读取文件(数据流、变量)?