Bash
bash 腳本從外部文件載入修改數組
我編寫了一個腳本,它正在讀取一個數組:recentdirs ,其目錄名稱來自一個名為****defaults.cfg的外部配置文件,使用者可以從列表中選擇一個目錄,也可以輸入一個新目錄。如果使用者輸入一個新目錄,我希望將其儲存為數組recentdirs中的第一個位置,並保存回配置文件defaults.cfg中。該腳本能夠以目前形式執行此操作,但它正在覆蓋文件defaults.cfg並因此失去了我想儲存在其中的所有其他值。我玩過“>>”,但隨後數組將被添加到文件的末尾而不是修改。
directory_select.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
你應該更換
grep ^recentdirs > defaults.cfg
和
sexp="s[^recentdirs.*[recentdirs=(${newdir[@]} ${recentdirs[@]})[" sed -i -e "$sexp" defaults.cfg