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上”。