为什么使用 eval echo 会覆盖 bash 脚本中的环境变量?

use*_*510 0 bash eval circleci

我正在编写一个基于 CircleCI orb 源代码的 bash 脚本,我很困惑为什么 bash 脚本中的环境变量子集会被设置为eval echo它们自己。

例如,这条线的目的是什么?

ORB_EVAL_REPO=$(eval echo "${ORB_EVAL_REPO}")
Run Code Online (Sandbox Code Playgroud)

这是源代码:

https://circleci.com/developer/orbs/orb/circleci/aws-ecr#orb-source

作为一个完整的示例,第 705-709 行设置了五个环境变量,但eval echo在第 691-692 行仅使用其中两个变量进行设置,即使这些变量在第 699-702 行以相同的方式使用:

command: |
    #!/bin/bash
    ORB_EVAL_REGION=$(eval echo "${ORB_EVAL_REGION}") # line 691
    ORB_EVAL_REPO=$(eval echo "${ORB_EVAL_REPO}")

    if [ "$ORB_VAL_PUBLIC_REGISTRY" == "1" ]; then
        echo "set-repository-policy is not supported on public repos"
        exit 1
    else
        aws ecr set-repository-policy \
            --profile "${ORB_VAL_PROFILE_NAME}" \ # line 699
            --region "${ORB_EVAL_REGION}" \
            --repository-name "${ORB_EVAL_REPO}" \
            --policy-text "file://${ORB_VAL_REPO_POLICY_PATH}"
    fi
environment:
    ORB_EVAL_REGION: <<parameters.region>> # line 705
    ORB_EVAL_REPO: <<parameters.repo>>
    ORB_VAL_PROFILE_NAME: <<parameters.profile-name>>
    ORB_VAL_PUBLIC_REGISTRY: <<parameters.public-registry>>
    ORB_VAL_REPO_POLICY_PATH: <<parameters.repo-policy-path>>
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经:

  • 阅读文档eval
  • 阅读 StackOverflow 对有关用例的问题的解答eval
  • eval echo试图从我正在阅读的特定源代码中推断出其目的
  • 在 GitHub 上搜索"=$(eval echo "以尝试找到其他示例

我很难弄清楚这一点。

Wii*_*imm 5

eval echo "$var"扩展 中的变量$var。例子:

a=" 12 "
b=' a  $a  b  '
echo "/$b/"      # prints: / a  $a  b  /
eval echo "/$b/" # prints: / a 12 b /
Run Code Online (Sandbox Code Playgroud)

副作用是修剪(删除)多个空格,并且可能会因特殊字符(如|或 )而失败'