【问题标题】:How to store property file keys into variables in a shell script after reading them如何在读取属性文件键后将它们存储到 shell 脚本中的变量中
【发布时间】:2021-09-12 18:26:08
【问题描述】:

如果我有一个给定的属性文件和一个 shell 脚本。如何将每个键值对存储在不同的变量中?

例如,如果我读取包含以下内容的属性文件 thing.properties:

USERNAME = "Me"
PASSWORD = "Secret"
DB_NAME = "THINGDB"

如何将这些密钥中的每一个存储在标记为 thingUSERNAME、thingPASSWORD 等的 shell 脚本中的自己的变量中。(变量名称可以是任何名称,只要它包含文件和密钥的一些相似之处)

(注意这必须在 sh 文件中完成) 任何意见表示赞赏

【问题讨论】:

    标签: shell sh properties-file


    【解决方案1】:

    您可以使用eval。不过要小心这个命令。这可能是毁灭性的。不幸的是,与bash 不同,sh 不支持declare。

    $ cat property.txt
    USERNAME = "Me"
    PASSWORD = "Secret"
    DB_NAME = "THINGDB"
    
    $ cat shell.sh
    #!/bin/sh
    
    while IFS= read -r line; do
        key="${line%% =*}"
        value="${line#*= }"
        eval "$key"="$value" # For ash, dash, sh.
        # declare "$key"="$value" # For bash, other shells.
    done < property.txt
    
    echo "username: $USERNAME"
    echo "password: $PASSWORD"
    echo "db_name: $DB_NAME"
    
    $ ./shell.sh
    username: Me
    password: Secret
    db_name: THINGDB
    

    【讨论】:

    • 不要使用eval。 declare 会做同样的事情,但(更)安全。
    • @chepner sh 不支持该命令。
    • 其实declare引入了自己的问题:从文件中读取的引号被当作值的一部分,而不是赋值语法的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多