创建与文件中的行相等的变量,并按顺序从文件中为变量分配值

时间:2019-04-01 12:24:55

标签: linux bash shell

我想创建与文件中的行数相等的多个变量,然后依次为文件中的每个变量分配一个值。

说,
file1 包含device1 device2 device3 .....
file2 包含olddevice1 olddevice2 olddevice3 .....

我想像我做echo $A = device1一样做值 同样echo $B = device2echo $Z = device26

我尝试了一个for循环,甚至一个数组,但无法通过它。

我尝试了以下操作:

iin=0
var=({A..Z})
for jin in `cat file1`
do
   array[$iin]="$var=$jin";
   iin=$(($iin+1));
   var="$(echo $var | tr '[A-Y]Z' '[B-Z]A')"
   printf '%s\n' "${array[@]}"
done`

2 个答案:

答案 0 :(得分:0)

我相信您没有抓住重点:变量在编程语言中具有固定名称,例如$A$B,...,$Z:在编程时,您需要指定那些程序中的变量,您不能指望程序发明自己的变量。

您要寻找的是集合,例如数组,列表,...:
您创建了一个集合A,并可以向其中添加值(A[n]=value_nA.SetAt(n, value_n),...,这取决于您使用的集合的类型。

答案 1 :(得分:0)

bash v4 及更高版本)下,类似mapfile的代码应该可以工作:

mapfile -O 1 -t  array1   < file1  
mapfile -O 1 -t  array2   < file2 
# output line #2 from both files
echo "${array1[2]}" "${array2[2]}" 
# output the last line from both files
echo "${array1[-1]}" "${array2[-1]}" 

注意:mapfile仅加载一个数组,但有更多选择。

  • -O 1将数组下标设置为从1开始,而不是默认的0;这不是必需的,但是它使代码更易于阅读。