Shell 从2个输入创建关联数组

Shell 从2个输入创建关联数组,shell,Shell,我有两个文件,内容如下: beam.csv frequency.csv 我想将每个波束与频率相关联,即构建一个关联数组,如NAME[beam]=frequency declare -A NAME while read -r beam && read -r -u 3 freq; do NAME[$beam]=$freq done < beam.csv 3< frequency.csv 声明-一个名称 当读取-r光束和读取-r-u 3频率时;做 名称[$

我有两个文件,内容如下:

  • beam.csv
  • frequency.csv
我想将每个波束与频率相关联,即构建一个关联数组,如
NAME[beam]=frequency

declare -A NAME
while read -r beam && read -r -u 3 freq; do
    NAME[$beam]=$freq
done < beam.csv 3< frequency.csv
声明-一个名称
当读取-r光束和读取-r-u 3频率时;做
名称[$beam]=$freq
完成
但这根本不对


当我运行
echo${!NAME[@]}“${NAME[@]}”
时没有输出,当我尝试
echo${NAME[T11]}
时也没有任何输出。

您的代码工作正常。可能您只是不知道,当您这样执行它时:

thisisyourshellprompt$ ./yourscript
它实际上在子shell中执行;因此,
NAME
变量是运行脚本的子shell的本地变量,而不是刚刚键入命令的shell的本地变量

脚本完成后,它将返回,您将返回shell,其中从未定义过
NAME

但是代码是有效的,您可以通过将
echo
放在脚本中进行验证,如中所示

declare -A NAME
while read -r beam && read -r -u 3 freq; do
    NAME[$beam]=$freq
done < beam.csv 3< frequency.csv
echo "${!NAME[@]}" "${NAME[@]}"
声明-一个名称
当读取-r光束和读取-r-u 3频率时;做
名称[$beam]=$freq
完成
您的代码工作正常。可能您只是不知道,当您这样执行它时:

thisisyourshellprompt$ ./yourscript
它实际上在子shell中执行;因此,
NAME
变量是运行脚本的子shell的本地变量,而不是刚刚键入命令的shell的本地变量

脚本完成后,它将返回,您将返回shell,其中从未定义过
NAME

但是代码是有效的,您可以通过将
echo
放在脚本中进行验证,如中所示

declare -A NAME
while read -r beam && read -r -u 3 freq; do
    NAME[$beam]=$freq
done < beam.csv 3< frequency.csv
echo "${!NAME[@]}" "${NAME[@]}"
声明-一个名称
当读取-r光束和读取-r-u 3频率时;做
名称[$beam]=$freq
完成
但是,您的代码正在运行。在哪里执行
echo“${!NAME[@]}”${NAME[@]}”
命令?尝试将其添加到代码中,作为最后一行,您将在执行脚本时看到ouptut。当我运行代码时,它全部为空,我是否遗漏了某些内容?插入
declare-p BASH_SUBSHELL;在while循环开始时中断
。如果它打印除0以外的任何内容,则很可能循环运行在不同于
echo
值的子shell中。您在哪里执行
echo
?如果您将脚本放入文件中,然后在
bash
中执行它,然后执行
echo
命令,则通常不会得到任何输出,因为
NAME
是运行脚本的子进程中的目标,而不是在shell中。我在脚本外部执行echo,但实际上它内部确实报告了,但我应该如何在myscript之外使用我的数组呢?然而,您的代码正在工作。在哪里执行
echo“${!NAME[@]}”${NAME[@]}”
命令?尝试将其添加到代码中,作为最后一行,您将在执行脚本时看到ouptut。当我运行代码时,它全部为空,我是否遗漏了某些内容?插入
declare-p BASH_SUBSHELL;在while循环开始时中断
。如果它打印除0以外的任何内容,则很可能循环运行在不同于
echo
值的子shell中。您在哪里执行
echo
?如果您将脚本放入文件中,然后在
bash
中执行它,然后执行
echo
命令,则通常不会得到任何输出,因为
NAME
是运行脚本的子进程中的目标,而不是在shell中。我在脚本外部执行echo,但实际上,在它内部确实有报告,但我应该如何在myscript外部使用我的数组?当我在子shell中创建数组时,如果我想用另一个文件的名称替换频率,所有操作都必须从脚本中完成?使用另一个文件的名称。。。。很抱歉,我听不懂评论。好吧,让我再说一遍,我的第一步是在我的波束名称和频率之间创建一个关联数组,现在我有另一个
.csv
文件,其中一列是
频率
,我想用
beam
名称代替
frequency
。这听起来像是一个与原始帖子中的问题不同的问题。你应该发布一个新的问题(如果这个问题解决了你的疑问,也许可以接受这个答案),在那里你陈述了你想要达到的目标。谢谢你Enrico的帮助和澄清,这确实值得再发布一个问题!!当我在子shell中创建数组时,如果我想用另一个文件的名称替换频率,那么所有操作都必须从脚本中完成?用另一个文件的名称。。。。很抱歉,我听不懂评论。好吧,让我再说一遍,我的第一步是在我的波束名称和频率之间创建一个关联数组,现在我有另一个
.csv
文件,其中一列是
频率
,我想用
beam
名称代替
frequency
。这听起来像是一个与原始帖子中的问题不同的问题。你应该发布一个新的问题(如果这个问题解决了你的疑问,也许可以接受这个答案),在那里你陈述了你想要达到的目标。谢谢你Enrico的帮助和澄清,这确实值得再发布一个问题!!