我在循环中向字符串添加字符串时遇到了一些麻烦。由于某种原因,它总是添加相同的行。这是我的代码:
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
由于某种原因,数组中的每个元素都是文件中的第一行。我一定做错了什么,只是不确定是什么。
非常感谢任何帮助
答案 0 :(得分:4)
试试这个脚本:
declare -a properties
while read line
do
[[ "${line}" == *=* ]] && properties+=("$line")
done < "${FILE}"
for x in "${properties[@]}"
do
echo "the value is "$x"
done
答案 1 :(得分:1)
作为@twalberg mentions in this comment,问题不在顶部循环中,而是在底部循环中:
for x in ${!properties[@]}
do
echo "the value is $properties[x]"
done
数组引用总是需要大括号{ ... }
才能正确扩展。
由于某种原因,数组中的每个元素都是第一行 文件。
不是这样。数组已正确填充,但您需要更改对数组的引用:
echo "the value is $properties[x]"
为:
echo "the value is ${properties[x]}"
只是一个简单的疏忽。
答案 2 :(得分:0)
向元素添加元素的一种更简单的方法是简单地使用语法:
VARNAME+=("content")
另外,正如所写,你的错误可能在这里:
(( counter=counter + 1 ))
它可能应该是以下三种中的一种:
(( counter=$counter + 1 ))
counter+=1
counter=$[$counter+1]
counter=$(($counter + 1))
答案 3 :(得分:0)
这个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 #
<强> input.txt中强>
a-b
a+b
a=b
a=1
b=1
1-a