将字符串添加到数组的外壳



我在将字符串添加到循环中的数组时遇到一些问题。出于某种原因,它总是添加相同的行。这是我的代码:

declare -a properties
counter=0
while read line
do
    if [[ ${line} == *=* ]]
    then
        properties[${counter}]=${line}
        (( counter=counter + 1 ))
    fi
done < ${FILE}
for x in ${!properties[@]}
do
    echo "the value is $properties[x]"
done

出于某种原因,数组中的每个元素都是文件中的第一行。我一定是做错了什么,只是不知道是什么。

任何帮助将不胜感激

试试这个脚本:

declare -a properties
while read line
do
   [[ "${line}" == *=* ]] && properties+=("$line")
done < "${FILE}"
for x in "${properties[@]}"
do
   echo "the value is "$x"
done

正如@twalberg在此评论中提到的,问题不在于顶部循环,而在于底部循环:

for x in ${!properties[@]}
do
    echo "the value is $properties[x]"
done

数组引用始终需要大括号{ ... }才能正确扩展。

由于某种原因,数组中的每个元素都是 文件。

并非如此。数组已正确填充,但您需要将对数组的引用从:

echo "the value is $properties[x]"

自:

echo "the value is ${properties[x]}"

只是一个简单的疏忽。

将元素添加到数组的一种更简单的方法是简单地使用以下语法:

VARNAME+=("content")

另外,如前所述,您的错误可能在这里:

(( counter=counter + 1 ))

它可能应该是以下三个之一:

(( counter=$counter + 1 ))
counter+=1
counter=$[$counter+1]
counter=$(($counter + 1))
<</div> div class="one_answers">

这个KornShell(ksh)脚本对我来说效果很好。如果有的话,请告诉我。

readFileArrayExample.ksh

#! /usr/bin/ksh
file=input.txt
typeset -i counter=0
while read line
do
    if [[ ${line} == *=* ]]; then
        properties[${counter}]="${line}"
        ((counter = counter + 1))
        echo "counter:${counter}"
    fi
done < "${file}"
#echo ${properties[*]}
for x in "${properties[@]}"
do
    echo "${x}"
done

readFileArrayExample.ksh 输出:

@:/tmp #ksh readFileArrayExample.ksh
counter:1
counter:2
counter:3
a=b
a=1
b=1
@:/tmp #

输入.txt

a-b
a+b
a=b
a=1
b=1
1-a

相关内容

  • 没有找到相关文章

最新更新