引用符内の変数の拡張

引用符内の変数の拡張

特定のプレフィックスで始まり、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

2つの奇妙なコマンド置換エラーがあります。

エンコーディングの代わりに

$(`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

おすすめ記事