Azure devops 如何在“.VSTS CI.yml”中的VSTS CI上设置小写变量名?

Azure devops 如何在“.VSTS CI.yml”中的VSTS CI上设置小写变量名?,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,给定以下.vsts ci.yml文件: queue: Hosted Linux Preview variables: foo: bar steps: - script: | ./test.sh #!/bin/bash echo ${foo} 以及以下test.sh文件: queue: Hosted Linux Preview variables: foo: bar steps: - script: | ./test.sh #!/bin/bash echo

给定以下
.vsts ci.yml
文件:

queue: Hosted Linux Preview
variables:
    foo: bar

steps:
- script: |
    ./test.sh
#!/bin/bash
echo ${foo}
以及以下
test.sh
文件:

queue: Hosted Linux Preview
variables:
    foo: bar

steps:
- script: |
    ./test.sh
#!/bin/bash
echo ${foo}
我得到空输出。但是,当我将文件更改为:

#!/bin/bash
echo ${FOO}
我得到了输出


是否有一种方法可以禁用变量名到大写的转换,以便
.vsts ci.yml
与希望变量使用小写或混合大小写名称的工具一起工作?

这是一种预期行为,无法控制。有关详细信息,请参阅此链接:

要定义或修改脚本中的变量,请使用task.setvariable 日志记录命令。请注意,更新的变量值的范围是 正在执行的阶段,并且不会跨阶段或环境流动。 变量名被转换为大写,字符“.” 和“”替换为“\u1”

例如,Agent.WorkFolder变为Agent\u WorkFolder。在窗户上, 您可以作为%AGENT\u工作文件夹或$env:AGENT\u工作文件夹访问此文件。在…上 Linux和macOS,您使用$AGENT\u WORKFOLDER


您可以使用脚本
-task:ms devlabs.utilityStasks.task Shellpp.Shell++@0 displayName:“Shell脚本”输入:type:FilePath scriptPath:test.sh
。如果您了解设计,我认为这是预期行为。如果您只是一个“经验丰富的普通Unix用户”,则这不是预期的行为。这种行为毫无意义。在Unix中,环境区分大小写,可以是小写管理,例如
http\u proxy
https\u proxy
。这是一个设计上的限制,对于一个新的hillarious管道系统来说。微软的一些人似乎刚刚将一些糟糕的DOS设计选择从70年代末转移到了2010年代的DevOps管道中。(不是抱怨你的答案,而是你必须给出答案的原因。)在Windows上的引用应该是
%AGENT\u WORKFOLDER%
,在Unix上最好是
${AGENT\u WORKFOLDER}
,当变量引用是文本的一部分时,可以保护没有经验的用户不受变量名称混乱的影响。另外,在Unix上,resp。“在Linux和macOS上”实际上是一个错误的说法,因为决定变量替换语法的不是操作系统而是shell,所以应该改为“在
sh
bash
和类似的典型shell上”。