【问题标题】:How can one store a variable in a file using bash?如何使用 bash 将变量存储在文件中?
【发布时间】:2011-08-23 08:54:27
【问题描述】:

我可以重定向输出,然后 cat 文件和 grep/awk 变量,但我想将此文件用于多个变量。

所以如果是一个变量说 STATUS 那么我可以做一些类似的事情

echo "STATUS $STATUS" >> variable.file
#later perhaps in a remote shell where varible.file was copied
NEW_VAR=`cat variable.file | awk print '{$2}'`

我想使用 sed 进行一些内联​​编辑会有所帮助。代码越小越好。

【问题讨论】:

    标签: bash


    【解决方案1】:

    在文件中存储变量的一种常见方法是在文件中仅存储 NAME=value 行,然后将其输入到要获取变量的 shell。

    echo 'STATUS="'"$STATUS"'"' >> variable.file
    # later
    . variable.file
    

    在 Bash 中,您也可以使用 source 代替 .,尽管这可能无法移植到其他 shell。仔细注意在文件中打印出正确双引号所需的确切引号顺序。

    如果您想一次将多个变量放入文件中,您可以执行以下操作。为正确和便携地做这件事所需要的引用扭曲表示歉意;如果您限制自己使用 Bash,您可以使用 $"" 使引用更简单:

    for var in STATUS FOO BAR
    do
        echo "$var="'"'"$(eval echo '$'"$var")"'"'
    done >> variable.file
    

    【讨论】:

    • @Amadan 它可以移植到任何 POSIX 兼容的 shell; Bash、dash、ksh、zsh 等
    • 确实如此。但不是cshtcsh
    • @Amadan 当提到 shell 之间的可移植性时,通常是指遵循 POSIX 标准(或接近)的 shell 之间的可移植性。当然,相同的结构不会移植到非标准外壳或符合不同标准的外壳。还有很多其他的 shell,比如 cmd.exe、PowerShell 等,它们不能移植到;它们是完全不同的语言,而不是同一种语言的变体。
    • 这很酷,但是您到底要如何更新文件中的变量呢?再次读取和写入其所有内容? ://
    • @Blauhirn 是的。对于像这样的小型配置文件,实际上没有更有效的方法可以做到;整个文件可能适合单个块,因此编辑整个文件与仅需要更改的部分花费相同的时间。而且,如果您要更新一些对效率很重要的大型数据库,那么您可能无论如何都不应该从 shell 脚本中这样做。
    【解决方案2】:

    declare 内置函数在这里很有用

    for var in STATUS FOO BAR; do
        declare -p $var | cut -d ' ' -f 3- >> filename
    done
    

    作为Brian says,以后可以source filename

    declare 很棒,因为它可以为您处理报价:

    $ FOO='"I'"'"'m here," she said.'
    $ declare -p FOO
    declare -- FOO="\"I'm here,\" she said."
    $ declare -p FOO | cut -d " " -f 3-
    FOO="\"I'm here,\" she said."
    

    【讨论】:

    • 啊,很好。我不知道declare -p。看起来它不是标准的,但如果你将自己限制在 Bash 和 zsh 中,它会起作用。如果您也打算将它提供给 Bash,您可能不需要使用 cut 剥离 declaredeclare -p 打印的 declare 语句应该可以设置变量。
    • 这很酷,但是您到底要如何更新文件中的变量呢?再次读取和写入其所有内容? ://
    猜你喜欢
    • 1970-01-01
    • 2015-05-19
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多