扩展引号内的变量

扩展引号内的变量

我正在尝试从 S3 存储桶获取文件,以某些前缀开始。为此,我使用AWS 命令​​行界面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]}
aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query "Contents[?contains(Key, '${files[n]}$(`date +%m%d`)')]" --output text | awk '{print $2, $4}' >> "$FILESIZE"
#cat $FILESIZE
done  

在我的代码中,在引号内扩展变量时出现问题, $( date +%m%d)日期变量不在引号内扩展。因此,代码的输出应该是这样的,只有今天到达的以上述前缀开头的文件才应该作为输入。

   Error: command not found in the line  aws s3api list-objects --bucket ui-dl-weather-ecmwf-ltf --prefix daily/ --query "Contents[?contains(Key, '${files[n]}$(`date +%m%d`)')]" --output text | awk '{print $2, $4}' >> "$FILESIZE"

有人可以帮我扩展引号内的变量吗

答案1

你有一个双重奇怪的命令替换错误:

而不是编码

$(`date +%m%d`)

你应该只写:

$(date +%m%d)

反引号 (`) 用于旧式命令替换,例如

foo=`命令`

foo=$(command)建议改用该语法。 $() 内部的反斜杠处理并不令人意外,而且 $() 更容易嵌套。看http://mywiki.wooledge.org/BashFAQ/082

测试扩展变量

declare -a files=( "A1S0" "D1S0" "D2S0" "D3S0" "D4S0" "D5S0" "D6S0" )
for n in "${!files[@]}"; do
    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')]

键包含扩展日期0526

相关内容