【发布时间】:2021-09-14 14:22:33
【问题描述】:
我遇到了以下命令的问题。我需要使用变量,但它返回 null 而当我硬编码它的值时,它返回正确的响应。 谁能帮我写这个命令的正确方法是什么? 我的意图是提取作为变量传递的相应键的值?
temp1="{ \"SSM_DEV_SECRET_KEY\": \"Smkfnkhnb48dh\", \"SSM_DEV_GRAPH_DB\": \"Prod=bolt://neo4j:Grt56@atc.preprod.test.com:7687\", \"SSM_DEV_RDS_DB\": \"sqlite:////var/local/ecosystem_dashboard/config.db\", \"SSM_DEV_SUPPERUSER_USERNAME\": \"admin\", \"SSM_DEV_SUPPERUSER_PASSWORD\": \"9dW6JE8@KH9qiO006\" }"
var_name=SSM_DEV_SECRET_KEY
echo $temp1 | jq -r '.SSM_DEV_SECRET_KEY' <----- return Smkfnkhnb48dh // output
echo $temp1 | jq -r '."$var_name"' <---- return null
echo $temp1 | jq -r --arg var_name "$var_name" '."$var_name"' <---- return null , alternative way
更新:我正在添加我尝试使用上述修复的实际部分。我的意图是首先读取所有以 SSM_DEV_... 开头的值,然后从 aws 获取原始值而不是替换它。一对密钥看起来像这样 --> SECRET_KEY=$ SSM_DEV_SECRET_KEY
temp0="dev"
temp1="DEV"
result1=$(aws secretsmanager get-secret-value --secret-id "xxx-secret-$temp0" | jq '.SecretString')
while IFS= read -r line; do
if [[ "$line" == *"=\$SSM_$temp1"* ]]; then
before=${line%%"="*}
after=${line#*"="}
var_name="${after:1}"
jq -r --arg var_name "$var_name" '.[$var_name]' <<< "$result1"
fi
done < sample_file.txt
修复:我已经解决了我的回车符问题。 下面的cmd帮帮我:
var_name=`echo ${after:1} | tr -d '\r'`
jq -r --arg var_name "$var_name" '.[$var_name]' <<< "$result1"
【问题讨论】:
-
顺便说一句,
echo $temp1 | ...本身就是错误的;见I just assigned a variable, butecho $variableshows something else!