我试图保存由我的脚本修改的变量列表,以便以后使用set重新加载。
initialVars="`set -o posix ; set`"
source script
saveTime="$(date +"%Y-%m-%d %T")" #first time declaring this var
saveVars="`grep -vFe "$initialVars" <<<"$(set -o posix ; set)"| grep -v ^initialVars=`"
echo $saveVars > snapshot.sav
unset saveVars
乍一看这似乎工作正常,但我注意到snapshot.sav不包含很多变量,这些变量肯定已被脚本修改过,但在设置initialVars之前甚至还没有初始化。例如,它不包括saveTime。
我检查了initialVars的内容,尚未初始化的变量还没有,但是如果我在grepping之前查看(设置-o posix; set),则会出现。
greps有什么问题吗?我对bash很新,所以我可能没有看到什么。
很抱歉,如果我的问题有点复杂,我还没有很多编程故障排除经验。
答案 0 :(得分:1)
添加-x
选项,使其与整行匹配:
saveVars="`grep -vxFe "$initialVars" <<<"$(set -o posix ; set)"| grep -v ^initialVars=`"
也不需要saveVars
变量。你可以这样做:
grep -vxFe "$initialVars" <<<"$(set -o posix ; set)"| grep -v ^initialVars= > snapshot.sav