gpt4 book ai didi

linux - 导出命令,其中包含 bash 脚本中其他变量声明中的变量名称和值

转载 作者:太空宇宙 更新时间:2023-11-04 05:09:46 25 4
gpt4 key购买 nike

我正在编写一个 bash 脚本,以从 AWS 系统参数参数存储中以 json 文本格式读取配置,然后导出到 Linux 环境变量。

总而言之,我有以下几点:

name='COMPANY_NAME'
value='System Manager'

command = "$name=$value"
echo $command
export $command

获取脚本并尝试访问变量后

echo $COMPANY_NAME # output System instead of System Manager

它将输出打印为系统,而不是系统管理器。据我了解,上述情况可能是由空白引起的。

如何转义上述导出命令中的空格和其他特殊字符?

下面我还附上了我的源脚本作为引用。

#!/usr/bin/env bash

## to update the main process with >> . file_name
##function definition
process_json(){
#$1: json string
#$2: indicee
#$3: env name
json=$1
i=$2
app_env=$3

element_name=$(echo $json | jq -r ".Parameters[$i].Name")
element_value=$(echo $json | jq -r ".Parameters[$i].Value")

env_var_name=$(variable_name "$element_name" "$app_env")

command="export $env_var_name=$element_value"
echo $command
export $env_var_name=$element_value
}

variable_name(){
var_name=$1 # "/app_env/name" come with double quote
app_env=$2

app_env_path="/$app_env/"
app_env_path_length=${#app_env_path}

env_var_name="${var_name:($app_env_path_length)}"
echo $env_var_name
}

console_log(){
display_log=1

if [ $display_log -eq 1 ]
then
echo $@
fi
}

fetch_config(){
app_env=$1
json_str="
{
\"Parameters\": [
{
\"Name\": \"/$app_env/APP_NAME\",
\"Type\": \"String\",
\"Value\": \"BookMeBus\"
},
{
\"Name\": \"/$app_env/APP_VERSION\",
\"Type\": \"String\",
\"Value\": \"StgVersion\"
},
{
\"Name\": \"/$app_env/COMPANY_NAME\",
\"Type\": \"String\",
\"Value\": \"System Manager\"
},
{
\"Name\": \"/$app_env/ERROR_NOTIFICATION\",
\"Type\": \"String\",
\"Value\": \"no\"
},
{
\"Name\": \"/$app_env/SLACK_CHANNEL\",
\"Type\": \"String\",
\"Value\": \"#error-staging\"
},
{
\"Name\": \"/$app_env/SLACK_WEB_HOOK\",
\"Type\": \"String\",
\"Value\": \"https://hooks.slack.com/services/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\"
}
]
}
"

# command_load_params="aws --region=ap-southeast-1 ssm get-parameters-by-path --path /$app_env"
# echo $command_load_params
# json_str=$($command_load_params)

echo $json_str
}

if [[ -z "${APP_ENV}" ]]; then
error="ENV['APP_ENV'] must be set "
echo $error
exit 1
elif [[ $APP_ENV != "staging" && $APP_ENV != "production" ]]; then
error="ENV['APP_ENV'] must be staging or production"
exit 1
fi

app_env=$APP_ENV

json=$(fetch_config "$app_env")
# console_log "json is: $json"

# echo requires
# console_log $json | jq '.Parameters'
# console_log $json | jq '[.Parameters[] | {Name: .Name, Value: .Value}] '

length=$(echo $json | jq '.Parameters | length')
# console_log "length=$length"
i=0
while [ $i -lt $length ]
do
# Passing variables to a function quote is required surround variable name
process_json "$json" "$i" "$app_env"
((i++))
done

下面是我的脚本的输出:

enter image description here

最佳答案

尝试如下:

name='COMPANY_NAME'
value='System Manager'

command="$name=$value"
echo $command
export "$command"

注意第三个也是最后一个语句的变化(重要)
说明:不带引号的扩展将空格视为分隔符。

关于linux - 导出命令,其中包含 bash 脚本中其他变量声明中的变量名称和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56920830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com