我编写了一个读取数组的脚本:最近的目录目录名称来自外部配置文件,名为:默认值.cfg用户可以从列表中选择一个目录或输入一个新目录。如果用户输入一个新目录,我希望将其存储为数组中的第一个位置最近的目录并保存回配置文件中默认值.cfg。该脚本能够执行此操作,但在当前形式下它会覆盖该文件默认值.cfg从而失去了我想存储在其中的所有其他值。我玩过“>>”,但随后数组将被添加到文件末尾而不是被修改。
目录选择.sh
#!/bin/bash
number=0
source defaults.cfg
for i in "${recentdirs[@]}"
do
#only show the last 5 directories
if [ $number -le 5 ]
then
echo "$number - $i"
number=$((number+1))
else
break
fi
done
read selection
#check if number or string was entered
regpat='^[0-9]+$'
if ! [[ $selection =~ $regpat ]]
then
newdir=( ${selection} )
#merge arrays to have the new entry at the first position
recentdirs=("${newdir[@]}" "${recentdirs[@]}")
#write array back into file
set | grep ^recentdirs > defaults.cfg
else
echo ${recentdirs[$selection]}
fi
defaults.cfg 的内容
recentdirs=([0]="/new/folder/" [1]="/folderA/folder1/" [2]="/folderB/folder2/" [3]="/folderX/folder5")
编辑工作版本:
#!/bin/bash
number=0
source defaults.cfg
for i in "${recentdirs[@]}"
do
#only show the last 5 directories
if [ $number -le 5 ]
then
echo "$number - $i"
number=$((number+1))
else
break
fi
done
read selection
#check if number or string was entered
regpat='^[0-9]+$'
if ! [[ $selection =~ $regpat ]]
then
newdir=( ${selection} )
#merge and write array back into file with sed
sexp="s[^recentdirs.*[recentdirs=(${newdir[@]} ${recentdirs[@]})["
sed -i -e "$sexp" defaults.cfg
else
echo ${recentdirs[$selection]}
fi
答案1
你应该更换
grep ^recentdirs > defaults.cfg
和
sexp="s[^recentdirs.*[recentdirs=(${newdir[@]} ${recentdirs[@]})["
sed -i -e "$sexp" defaults.cfg