我尝试逐行阅读文件。
要阅读的文件:
polkit|0.105
NetworkManager|0.9.4.0
GConf|3.2.5
libgnome-keyring|3.4.1
mozilla-nss|3.13.5
network-manager-applet|0.9.4.1
...
脚本:
COUNTER=1
until [ $COUNTER == '$(sed $= -n /tmp/packages-install)' ]; do
FIRST[$COUNTER]=$(head -n $COUNTER /tmp/packages-install | cut -d\| -f 1)
version[$COUNTER]=$(head -n $COUNTER /tmp/packages-install | cut -d\| -f 2)
echo "${FIRST[$COUNTER]}"
let COUNTER=COUNTER+1
done
echo "${FIRST[2]}"
MYARRAY=()
for ((i=1; i < ${#FIRST[@]} ; i++)); do
MYARRAY=( ${MYARRAY[@]} ${FIRST[$i]} ${version[$i]} )
done
Xdialog --menubox Choose 20 100 1 "${MYARRAY[@]}"
当我执行脚本时,将打开此窗口: (注意一些值是如何重复的,内容不能在名称和版本之间正确交替):
我想创建一个包含所有包名和版本的数组。
答案 0 :(得分:4)
你根本不需要一个计数器,每一行调用head
两次是非常低效的。
array=( )
while IFS='|' read -r name version; do
echo "Package $name is at version $version" >&2
array+=( "$name" "$version" )
done </tmp/packages-install
请参阅BashFAQ #001: How can I read a file (data stream, variable) line-by-line (and/or field-by-field)?