簡體   English   中英

如何在 bash shell 的數組中轉義星號“*”

[英]How to escape asterisk symbol '*' in an array in bash shell

我是 bash shell 的新手。 之前的開發人員創建了以下代碼以使用 shell 腳本來部署 AWS cloudformation 堆棧。

  1. 讀取 json 文件並使用jq將其轉換為稱為parameters的數組
  2. 使用${parameters[@]}傳播到 key=value 對字符串

問題是一個數組值是cron(0 20-6 * *? *) deploy.sh 會將*轉換為當前目錄文件名,如cron(0 20-6 CODEOWNERS README.md CODEOWNERS README.md? *)

我的問題:如何讓 deploy.sh 在調用${parameters[@]}時轉義*字符。

以下是示例代碼:

開發者json

{
  "Parameters": {
    "Environment": "dev",
    "CrawlerScheduleExpression": "cron(0 20-6  * * ? *)"
  },
  "Tags": {
    "Severity": "High",
    "Environment": "dev",
    "DeletionPolicy": "Retain"
  }
}

部署.sh

parameters=($(jq -r '.Parameters | keys[] as $k | "\($k)=\(.[$k])"' "dev.json")) 
tags=($(jq -r '.Tags | keys[] as $k | "\($k)=\(.[$k])"' "${conf_file}"))

    aws cloudformation deploy \
    --s3-bucket ${BUILD_ARTIFACTS_BUCKET} \
    --s3-prefix ${PROJECT_NAME} \
    --template-file ${template} --stack-name ${STACK_NAME} \
    --parameter-overrides "${parameters[@]}" \ # Environment=dev CrawlerScheduleExpression=cron(0 20-6 CODEOWNERS README.md CODEOWNERS README.md ? *) 
    --tags "${tags[@]}"  

最后,我必須禁用 bash 通配符擴展才能實現我的目標:(

set noglob on

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM