bash - 使用 bash 从 ubuntu 上的文件中读取具有未转义字符的 env 变量

标签 bash ubuntu environment-variables

如何在 bash 中读取包含空格和可能需要转义的其他字符的环境变量?
我有一个文件 server.env

PUBLIC_KEY=ssh-rsa whatever+whatever+8whatever/whatever+p+whatever user@alans-MacBook-Pro.local
我正在尝试将此文件作为环境变量读入 bash 脚本:
export $(cat server.env | xargs)
我收到一个错误:
-bash: export: `user@alans-MacBook-Pro.local': not a valid identifier
好的,尝试引用 server.env 中的值:
PUBLIC_KEY='ssh-rsa whatever+whatever+8whatever/whatever+p+whatever user@alans-MacBook-Pro.local'
  • 同样的错误

  • 双引号:
    PUBLIC_KEY="ssh-rsa whatever+whatever+8whatever/whatever+p+whatever user@alans-MacBook-Pro.local"
    
  • 还有错误

  • 我在这里想念什么?

    最佳答案

    Bash 提供带有子字符串删除的参数扩展,这将允许您分隔 NAME=valueserver.env 读取的对文件,然后 export NAME=value对。
    您只需要一个简单的读取循环:

    #!/bin/bash
    
    while read -r line; do              ## read each line of server.env
        val="${line#*=}"                ## trim to 1st =, save in val
        export ${line%=$val}="$val"     ## remove =$val leaving name, export val with name
    done < server.env
    
    printf "%s\n" "$PUBLIC_KEY"         ## confirm
    
    示例使用/输出
    $ bash test.sh
    ssh-rsa whatever+whatever+8whatever/whatever+p+whatever user@alans-MacBook-Pro.local
    
    其中基本参数扩展是:
    ${var#pattern}      Strip shortest match of pattern from front of $var
    ${var##pattern}     Strip longest match of pattern from front of $var
    ${var%pattern}      Strip shortest match of pattern from back of $var
    ${var%%pattern}     Strip longest match of pattern from back of $var
    
    ( 注意: pattern 可以包含普通的 shell glob,如 '*''?' )
    实际上有几十个有用的参数扩展可以用于字符串操作。只需检查 man bash"Parameter Expansion"标题。

    关于bash - 使用 bash 从 ubuntu 上的文件中读取具有未转义字符的 env 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65867051/

    相关文章:

    linux + 在目录下的文件中快速查找单词

    Linux sftp 服务器上的权限问题

    php - PHP 中的 While 循环,位于 shell 脚本内

    ruby - 从命令行运行时,反引号在 ruby​​ 脚本中工作,但不是从 Crontab

    ruby-on-rails - Rails 4.2 没有读取 Database.yml 的环境变量

    python - zappa将环境变量上传到哪里?

    bash - 管道 |重定向 < > 优先级

    bash - 用于在 EC2 的配置文件中写入 RDS 端点的 CloudFormation UserData 模板

    linux - Ubuntu -If 命令似乎不提供其他结果

    reactjs - Docker从docker-compose.yml设置ENV变量