[英]Export result from FIND command to variable value in linux shell script?
[英]export command with variable name and value from other variable declaration in bash script
我正在編寫一個 bash 腳本以從 json 文本格式的 AWS 系統參數參數存儲中讀取配置,然后導出到 linux 環境變量。
總之,我有以下幾點:
name='COMPANY_NAME'
value='System Manager'
command = "$name=$value"
echo $command
export $command
在獲取腳本並嘗試訪問 var 后
echo $COMPANY_NAME # output System instead of System Manager
它將輸出打印為System而不是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
下面是我的腳本的輸出:
它的export command
沒有 $; 否則,您將導出變量的值,而不是變量(名稱)本身。
你會想要雙引號你的變量(特別是在這種情況下導出):
name="COMPANY_NAME"
value="System Manager"
command=$name=$value
echo "$command"
export "${command?}" # ${var?} silences warning
然后當你獲取它時:
$ source script.sh
$ echo "$COMPANY_NAME"
System Manager
嘗試如下:
name='COMPANY_NAME'
value='System Manager'
command="$name=$value"
echo $command
export "$command"
注意第三個和最后一個語句的變化(重要)
說明:未加引號的擴展將空格視為要分隔的標記。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.