Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Bash-附加到数组问题_Arrays_Bash - Fatal编程技术网

Arrays Bash-附加到数组问题

Arrays Bash-附加到数组问题,arrays,bash,Arrays,Bash,我对bash很陌生 我有以下代码: while read line do foundproduct=`echo $line | awk -F "\"*,\"*" '{print $2}'` if [ "$foundproduct" == "$product" ]; then productid=`echo $line | awk -F "\"*,\"*" '{print $19}'` newid=1 for i in ${produ

我对bash很陌生

我有以下代码:

while read line
do
    foundproduct=`echo $line | awk -F "\"*,\"*" '{print $2}'`
    if [ "$foundproduct" == "$product" ]; then
        productid=`echo $line | awk -F "\"*,\"*" '{print $19}'`
        newid=1
        for i in ${productids[@]}
        do
            if [ "${productids[i]}" == "$productid" ] ; then
                newid=0
                break
            fi
        done
        if (( newid == 1 )) ; then
            declare -p productids
            echo "$productid"
            echo "1. $productids[${#productids[@]}]"
            productids+=("$productid")
            echo "2. $productids[${#productids[@]}]"
            declare -p productids
        fi          
        loadid=`echo $line | awk -F "\"*,\"*" '{print $39}'`
    fi
done < hddtable1.csv
CSV中的列如下所示:

在同一个脚本中,我在bash中使用了这种附加到数组的方法,效果很好,有人能帮我弄清楚为什么这样做不起作用吗?我尝试过使用productid+=“$productid”,出于某种原因,它只是将所有内容附加到数组中第一个条目的末尾

在数组中迭代:

for i in ${productids[@]}
do
    echo "${productids[i]}"
done
此文件的完整输出:

ST900MM0006 
ST900MM0006 
ST900MM0006 
ST900MM0006 
ST900MM0006 
ST900MM0006 
ST900MM0006 
ST900MM0006 
ST900MM0006 
ST900MM0006 
ST900MM0006 
ST900MM0006 
ST900MM0006 
ST900MM0006

您可以像这样轻松地附加到Bash数组:

productids+=("$productid")

您可以在on中找到类似的示例。

您可以像这样轻松地附加到Bash数组:

productids+=("$productid")


您可以在on中找到类似的示例。

在迭代数组时,我错误地访问了该数组。应该使用“$i”而不是“${productids[i]}”。

在迭代数组时,我错误地访问了该数组。应该使用“$i”而不是“${productids[i]}”。

刚刚尝试过,它给了我相同的结果。@Noah,你能在命令前后
声明-p productids
并复制粘贴你的结果和你输入的确切命令吗,进入你的问题?@Noah你确定你没有打错吗?@Noah,
echo$BASH_VERSION
的输出是什么?@ghoti完成了,我看到这产生了我想要的结果,那么我该如何使用它?刚刚尝试了一下,它给了我同样的结果。@Noah,你能在命令前后
声明-p productids
吗,然后将你的结果和你输入的命令复制粘贴到你的问题中?@Noah你确定你没有打错吗?@Noah
echo$BASH_VERSION
?@ghoti完成了,我看到这产生了我想要的结果,那么我如何使用它呢?那么。。到底是什么不起作用?您的结果与我对您的代码的期望完全相同。你期望的是什么?好吧,停止“假设性”的事情,提供一个能真正显示你真正问题的答案。顺便说一句,我们这里有真实的编辑历史。你不需要在最后添加EDIT1/EDIT2/EDIT3的内容——形成你的编辑,为那些以前从未见过这个问题的人提供最大的可读性;以前版本的人如果想知道更改了什么,可以检查差异。我没有要求“完整的相关代码”。我要求(站点规则要求您提供)一个——在没有不必要的环境设置或依赖项的情况下运行时产生相同bug的尽可能短的代码。这是一个不错的时机,尤其是。我希望尝试生成一个单独的、简短的、自包含的、可复制/粘贴的脚本将引导您自己发现问题的原因。如果没有,它会把问题放到一个我可以为它建立答案的状态。所以。。到底是什么不起作用?您的结果与我对您的代码的期望完全相同。你期望的是什么?好吧,停止“假设性”的事情,提供一个能真正显示你真正问题的答案。顺便说一句,我们这里有真实的编辑历史。你不需要在最后添加EDIT1/EDIT2/EDIT3的内容——形成你的编辑,为那些以前从未见过这个问题的人提供最大的可读性;以前版本的人如果想知道更改了什么,可以检查差异。我没有要求“完整的相关代码”。我要求(站点规则要求您提供)一个——在没有不必要的环境设置或依赖项的情况下运行时产生相同bug的尽可能短的代码。这是一个不错的时机,尤其是。我希望尝试生成一个单独的、简短的、自包含的、可复制/粘贴的脚本将引导您自己发现问题的原因。如果没有,它会把问题放到一个状态,我可以为它建立一个答案。也许。在${productids[@]}中为i运行
时,您正在逐步遍历这些值。如果您想将
$i
作为索引,您应该在“${!productids[@]}”
中为i使用
。在${productids[@]}
中为i运行
时,您正在逐步遍历这些值。如果您想将
$i
作为索引,那么应该在“${!productids[@]}”
中为i使用