如何使脚本中使用的变量变为全局变量

如何使脚本中使用的变量变为全局变量

我想读取按列排序的数据文件。
在我编写的脚本中,我使用read命令。

输入文件由如下几行组成:

XX:XX:XX:XX:XX   PQRTS
YY:YY:YY:YY:YY   ABCDE
ZZ:ZZ:ZZ:ZZ:ZZ   FGHIJ

我用来阅读的内容是这样的

while read a b; do 
echo $a
echo $b
done < filename.txt

到目前为止,它逐行读取并在循环的第一次迭代中分配给 和到XX:XX:XX:XX:XX,在第二 次迭代中分配给和到,依此类推。 aPQRTSbwhileYY:YY:YY:YY:YYaABCDEb

现在我的问题是:

  1. 如何使用ab作为全局变量?
  2. 我想分配XX:XX:XX:XX:XXYY:YY:YY:YY:YY以便可以在不同的功能中使用它们。

答案1

看来你需要bash arrays
为了达到你的目的,你可以编写如下脚本

#!/bin/bash
i=0
while read a[$i] b[$i]; do 
  echo ${a[$i]}                # Print the current one a
  echo ${b[$i]}                # Print the current one b 
  i=$[ i+1 ]                   # Increment i
done < filename.txt  
#  do other stuffs...          # if you want
echo "$[ $i -1 ] Items read "  # The number of lines read
echo The second a was ${a[1]}  # Array starts from 0
echo Those are all b  ${b[*]}  # You can print all together
  1. 这取决于你的意思global。遗憾的是,你不能简单地将export它们放在脚本之外。从此man bashbash 4.3.11(1)-release可以阅读。

    数组变量可能(尚未)被导出。

  2. 在脚本中,您可以将数组用作普通变量。echo $a您不必使用诸如echo ${a[0]}或之类的东西来引用它们echo ${b[2]}...
    请注意,您需要{}保护它们。

相关内容