我正在与gitlab ci/cd变量作斗争。我看到了很多相互矛盾的例子。无论如何,我想知道的是如何在脚本内外使用变量。
例如,在作业配置中,我可以用bash命令在脚本部分分配一个变量吗?
some-job:
variables:
SOME_VAR: ''
script:
- SOME_VAR = $(<file_with_a_line_of_text.txt)
在上面的情况下,我不确定我是否能做到这一点。但我需要用文件内容(即工件(填充一个变量。此外,我什么时候在变量前面使用"$"?我看到的一些使用这些格式的例子:
"SOME_VAR" #in quotes, no dollar sign
"${SOME_VAR}" #in quotes, with dollar sign and wrapped with curly braces
${SOME_VAR} #no quotes, with dollar sign and wrapped with curly braces
$SOME_VAR #i.e. without the double quotes or curly braces
SOME_VAR #i.e. without the double quotes, dollar sign, and curly braces
我在例子中看到了很多用法的变化,但不知道什么时候该使用每种风格。我在网上找不到一个使用bash命令在脚本中设置自定义变量的例子。
当我在bash中设置变量时,我总是在=
:周围没有空格
VAR1="some string"
VAR2=23
VAR3=true
VAR4=$(cat /path/to/file.txt)
让我们一次看一个例子:
- 您可以通过在字符串周围使用引号将变量设置为字符串
- 您可以将其设置为int(可能也是float,但尚未亲自使用(
- 你可以把它设置为bool
- 您可以将其设置为命令的输出。该命令位于命令内部:
$(#command)
现在让我们使用它们:
echo $VAR1
# some string
echo "This is my variable $VAR1"
# This is my variable some string
echo "This is my variable ${VAR1}"
# This is my variable some string
echo ${VAR1}
# some string
echo "Error code ${VAR2}A"
# Error code 23A
echo "Error code $VAR2A"
# Error code --- Note: the variable $VAR2A dosn't exist
echo "Error code ${VAR2}${VAR1}"
# Error code 23some string
echo VAR1
# VAR1
echo "VAR1"
# VAR1
这说明了不同形式之间的差异,但通常情况下,您使用$+variable-name
引用变量的值。执行CCD_ 4或CCD_;SOME_VAR";(即根本不引用变量(。
$SOME_VAR
和${SOME_VAR}
之间的区别在于,后者允许您在变量前后直接存在其他内容时使用它,而不会出错。
如何在gitlab ci/cd中使用自定义变量?
通常类似于任何其他shell。
但请注意,gitlab-ci.yml
是一个yaml文件,yaml有特殊的部分。因为在script:
中,例如- echo bla
与- 'echo bla'
相同,因为在yaml中,script:
的内容是后来由shell吐出的字符串数组。
如何在脚本内外使用变量。
通常类似于任何其他shell脚本。
何时使用每种风格的
"SOME_VAR" #in quotes, no dollar sign SOME_VAR #i.e. without the double quotes, dollar sign, and curly braces
当您想要一个字符串SOME_VAR
时
"${SOME_VAR}"
与"$SOME_VAR"
相同。当您希望SOME_VAR
变量的内容按字面意思显示时。
${SOME_VAR} #no quotes, with dollar sign and wrapped with curly braces $SOME_VAR #i.e. without the double quotes or curly braces
当您想要在分词和文件名扩展后的SOME_VAR
变量的内容时。这意味着SOME_VAR='*'
和echo "$SOME_VAR"
将打印*
,但echo $SOME_VAR
将打印当前目录中的所有文件。您通常总是希望引用展开式。
如果与其他字符串连接,则使用形式${SOME_VAR}
,例如$SOME_VARbla
不是${SOME_VAR}bla
。
不要在脚本中使用大写变量,而应该使用小写变量。导出的变量更喜欢使用大写变量。注意冲突-COLUMN
PATH
USER
UID
是已使用的变量的示例。
我可以用bash命令在脚本部分分配一个变量吗?
Shell具有空间意识。var = val
将执行名为var
的命令,其中包含两个参数=
和val
。CCD_ 32将字符串val
分配给名为var
的变量。Do:
- SOME_VAR=$(<file_with_a_line_of_text.txt)
在gitlab ci,我更喜欢使用cat
,以防我想搬到高山。$(<
是bash扩展。
- SOME_VAR=$(cat file_with_a_line_of_text.txt)
在具有variables: SOME_VAR
的环境中设置提供SOME_VAR
似乎没有任何意义。
何时在变量前面使用"$"?
当您想要触发变量扩展时。变量展开用变量名代替变量值。
使用检查脚本http://shellcheck.net。阅读https://mywiki.wooledge.org/BashGuide一个好的外壳介绍和https://wiki.bash-hackers.org/scripting/obsolete。