【问题标题】:How to compare a list of variables in bash?如何比较bash中的变量列表?
【发布时间】:2014-07-05 14:03:23
【问题描述】:

我正在尝试保存我的脚本修改的变量列表,以便以后使用 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 之前查看 (set -o posix ; set) 则存在。

grep 有什么问题吗?我对 bash 还很陌生,所以我可能看不到任何东西。

对不起,如果我的问题有点复杂,我还没有太多的编程故障排除经验。

【问题讨论】:

    标签: bash variables compare difference


    【解决方案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
    

    【讨论】:

    • -x 解决了我的问题,非常感谢!还要感谢关于不必要的 var 的提示,这样更整洁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 2016-04-28
    • 2018-02-12
    • 1970-01-01
    • 2015-05-22
    • 2021-10-29
    • 2022-06-28
    相关资源
    最近更新 更多