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

标签 linux bash function

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

当我运行脚本时,所有单词参数 (word1-word8) 都被打印了 - 直到现在一切都很好!当我想打印为 word1=$word1在函数之外然后由于某种原因 word1 没有得到值

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

我尝试使用导出命令,但没有帮助; 导出 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

.

 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

脚本输出示例:

./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=

最佳答案

man bashdeclare下解释:

When used in a function, declare makes NAMEs local, as with the local command.

关于linux - bash 脚本 - 为什么在函数下设置值而不在函数外设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24910425/

相关文章:

linux - perl 的 Devel::ebug 如何

linux - 如何通过 grep 响应找出有多少调用超时?

c++ - C 与 C++ 函数问题

function - 如何使 Clojure 函数采用可变数量的参数?

linux - sed中 'Hold space'和 'Pattern space'的概念

linux - 在 imap2 中获取结果以显示在控制台中

c++ - 解决方案范围在 Visual Studio 中定义?

bash - 将数字转换为人类可读的 KB/MB/GB/TB

linux - 使用bash按第5列对csv文件进行排序

javascript - 如何在初始功能之前将一个变量重置为原始值?