我一直試圖找出一種方法來從從檔案中的串列中讀取的字串(變數名)中擴展變數。
這里的目標是評估 gitlab 管道中的所有變數是否都存在,如果不存在,則使管道失敗。
最好的解決方案是將其作為單線并在 Alpine 的 ash 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 < $1
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:~#
此處所需的行為是在任何變數為空/未設定的情況下以錯誤退出腳本。
干杯!
uj5u.com熱心網友回復:
我做錯了什么。
您的變數不會匯出。在運行您的腳本之前運行以下命令。
export VAR1 VAR2 VAR3
使用 shellcheck 檢查您的腳本。false=true- 最好使用不同的變數名...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/359472.html
