bash脚本 - 为什么在函数下设置值而不在函数外部设置

mai*_*ash 0 linux bash function

以下bash脚本的目标是读取CSV文件(all_words.CSV)并打印参数和值,但我有一个非常奇怪的问题.

当我运行脚本时,所有单词参数(word1-word8)都打印出来 - 直到现在每件事情都很好!当我想打印word1=$word1出函数之外然后是出于某种原因word1 not get the value

为什么所有参数(word1-word8)都在函数中打印值,当我想word1在函数外部打印时,word1没有值?

我尝试使用export命令,但它没有帮助; export word1=$word1

请告知它是怎么回事?这有什么问题?

 #!/bin/bash

 read_csv ()
  {
  CSV_LINE=2

 vars=()
 c=1
 while IFS=, read -ra arr; do
    if ((c==1)); then
      vars+=("${arr[@]}")
   elif ((c==CSV_LINE)); then
     for ((i=0; i<${#arr[@]}; i++)); do
        declare ${vars[$i]}="${arr[$i]}"
     done
  fi
   ((c++))
  done <  all_words.CSV 

 echo CSV_LINE=$CSV_LINE
 echo word1=$word1
 echo word2=$word2
 echo word3=$word3
 echo word4=$word4
 echo word5=$word5
 echo word6=$word6
 echo word7=$word7
 echo word8=$word8

  }


read_csv

echo word1=$word1
Run Code Online (Sandbox Code Playgroud)

.

 more all_words.CSV

  word1,word2,word3,word4,word5,word6,word7,word8
  &^#G TR /erfernfjer *&^NHY " "" ? /  $@H,@Y^%" E "R$%*&*UJ,**U&^#%%@$^&//  \\,^T%!#&^YG.+___KI*&HHTY,%%@$#!%^#&,P/\06E87*UHG11#
 ,edehu234#@!&,~hum&T%6e4
Run Code Online (Sandbox Code Playgroud)

脚本输出示例:

./readWords_from_csv.bash
CSV_LINE=2
word1=&^#G TR / erfernfjer *&^NHY " "" ? / $@H
word2=@Y^%" E "R$%*&*UJ
word3=**U&^#%%@$^&//\\
word4=^T%!#&^YG.+___KI*&HHTY
word5=%%@$#!%^#&
word6=P/\06E87*UHG11#
word7=edehu234#@!&
word8=~hum&T%6e4

word1=
Run Code Online (Sandbox Code Playgroud)

cho*_*oba 5

man bash解释declare如下:

在函数中使用时,declare将NAME设置为本地,与local命令一样.