Расширение переменной внутри кавычек - PullRequest
0 голосов
/ 26 мая 2020

пытаюсь получить файлы из ведра S3, начиная с определенного префикса. Для этого я использую команду aws cli в сценарии bash.

Ниже мой код

#!/bin/bash  

FILESIZE=$(mktemp)
declare -a files=( "A1S0" "D1S0" "D2S0" "D3S0" "D4S0" "D5S0" "D6S0" )
for n in "${!files[@]}"; do
    printf '%8d  %s\n' "${n}" ${files[n]}
 echo aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query "Contents[?contains(Key, '${files[n]}$(date +%m%d)')]" 

готово

В моем коде есть проблема при расширении переменных внутри кавычек $ (date +% m% d) ** Переменная даты расширяется, но мне нужно избегать одинарных кавычек ** 'A1S00526' . Как я могу это сделать? Пожалуйста, помогите мне

Вывод:

aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'A1S00526')]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'D1S00526')]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'D2S00526')]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'D3S00526')]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'D4S00526')]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'D5S00526')]
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, 'D6S00526')]

Ожидаемый результат:

 aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, A1S00526)]
    aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, D1S00526)]
    aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, D2S00526)]
    aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, D3S00526)]
    aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, D4S00526)]
    aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, D5S00526)]
    aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query Contents[?contains(Key, D6S00526)]

Может ли кто-нибудь, пожалуйста, помочь мне расширить переменные внутри кавычек

Когда я запускаю код, как показано ниже, найдите прикрепленный результат

aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query \'"Contents[?contains(Key, ${files[n]}$(date +%m%d))]"\'

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Если вы напишете echo как

echo aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query "Contents[?contains(Key, ${files[n]}$(date +%m%d))]" 

, вы получите именно тот результат, который ожидали. Если вы действительно хотите запустить команду, и важно, чтобы кавычки были переданы на aws, она будет

for n in "${!files[@]}"; do
  printf '%8d  %s\n' "${n}" ${files[n]}
  aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query "Contents[?contains(Key, '${files[n]}$(date +%m%d)')]" 
done

Короче: вам нужны кавычки, вы помещаете их внутрь. Вы не хотите их, вы их оставите.

0 голосов
/ 26 мая 2020

Это то, что вам нужно сделать:

#!/bin/bash

FILESIZE=$(mktemp)
declare -a files=("A1S0" "D1S0" "D2S0" "D3S0" "D4S0" "D5S0" "D6S0")
for n in "${!files[@]}"; do
    #printf '%8d  %s\n' "${n}" ${files[n]}
    echo aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query \'"Contents[?contains(Key, ${files[n]}$(date +%m%d))]"\'
done

Результат будет:

aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, A1S00526)]'
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, D1S00526)]'
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, D2S00526)]'
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, D3S00526)]'
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, D4S00526)]'
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, D5S00526)]'
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query 'Contents[?contains(Key, D6S00526)]'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...