gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:39:06 25 4
gpt4 key购买 nike

如何在 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com