ASH/BASH 在 Alpine 中:如何从列表文件中读取的变量名列表扩展变量
ASH/BASH in Alpine: how to expand a variable from a list of variable names read from a list file
我一直在想办法从文件中的列表中读取的字符串(变量名)扩展变量。
这里的objective是判断一个gitlab pipeline中的所有变量是否都存在,如果不存在则fail pipeline
最好的解决方案是将它作为单线并使用 Alpine 的灰 shell,但 bash -c“某物某物”也可以。
很明显 (!) 扩展字符有问题,因为 varcontent 总是空的,但我就是不知道我做错了什么。
alpine314:~# cat checkvars.sh
#!/bin/bash
false=false
while read -r line; do
varcontent=${!line}
if [ -z "$varcontent" ]; then
echo "Error: Missing a required pipeline variable."
false=true
exit 1
else
echo "$line: $varcontent"
fi
done <
alpine314:~# cat varsfile
VAR1
VAR2
VAR3
alpine314:~# echo $VAR1
1
alpine314:~# echo $VAR2
2
alpine314:~# echo $VAR3
alpine314:~# bash -x checkvars.sh varsfile
+ false=false
+ read -r line
+ varcontent=
+ '[' -z '' ']'
+ echo 'Error: Missing a required pipeline variable.'
Error: Missing a required pipeline variable.
+ false=true
+ exit 1
alpine314:~#
此处所需的行为是在任何变量被设置 empty/not 的情况下以错误退出脚本。
干杯!
what I'm doing wrong.
您的变量未导出。 运行 运行 您的脚本之前的以下内容。
export VAR1 VAR2 VAR3
使用 shellcheck 检查您的脚本。 false=true
- 最好使用不同的变量名...
我一直在想办法从文件中的列表中读取的字符串(变量名)扩展变量。
这里的objective是判断一个gitlab pipeline中的所有变量是否都存在,如果不存在则fail pipeline
最好的解决方案是将它作为单线并使用 Alpine 的灰 shell,但 bash -c“某物某物”也可以。
很明显 (!) 扩展字符有问题,因为 varcontent 总是空的,但我就是不知道我做错了什么。
alpine314:~# cat checkvars.sh
#!/bin/bash
false=false
while read -r line; do
varcontent=${!line}
if [ -z "$varcontent" ]; then
echo "Error: Missing a required pipeline variable."
false=true
exit 1
else
echo "$line: $varcontent"
fi
done <
alpine314:~# cat varsfile
VAR1
VAR2
VAR3
alpine314:~# echo $VAR1
1
alpine314:~# echo $VAR2
2
alpine314:~# echo $VAR3
alpine314:~# bash -x checkvars.sh varsfile
+ false=false
+ read -r line
+ varcontent=
+ '[' -z '' ']'
+ echo 'Error: Missing a required pipeline variable.'
Error: Missing a required pipeline variable.
+ false=true
+ exit 1
alpine314:~#
此处所需的行为是在任何变量被设置 empty/not 的情况下以错误退出脚本。
干杯!
what I'm doing wrong.
您的变量未导出。 运行 运行 您的脚本之前的以下内容。
export VAR1 VAR2 VAR3
使用 shellcheck 检查您的脚本。 false=true
- 最好使用不同的变量名...