Buildspec、Codebuild、AWSのSTDOUTで配列を宣言する方法

Buildspec、Codebuild、AWSのSTDOUTで配列を宣言する方法

AWS Codebuildの一部であるBuildspecのSTDOUTで配列を宣言するのに問題があります。 Pure Bourne Shellビルド仕様では、私のコードではこの行を使用できませんdeclare -a available_envs=($(eb list --all))available_envs=($(eb list --all))

some build command...

eb list --all # list all created env in Elastic Beanstalk

declare -a available_envs=($(eb list --all)) # <<< here is a problem because I can't create array this way.
echo ${available_envs[@]} # <<< checking if variabla have all available env 

if [[ ${available_envs[*]} =~ 'develop' ]]; then
    echo 'Develop environment is allready created.'
    else
        echo "Creating Develop environment..."
        eb create develop
fi

some build command...

よろしくお願いします。


編集する:

コマンド出力eb list --all

develop
production
stage

解決策:視点を変えてくれた@fahoに感謝します。

grepコマンドの前に少し切り捨てます。

some build command...
envs=$(eb list --all | tr -d " \t\r" | tr -d [*] | grep "develop")
echo ${envs}

if [ "${envs}" = "develop" ]; then
        echo 'Develop environment is already created.'
        else
                echo "Creating Develop environment..."
fi
some build command...

ベストアンサー1

Posix shには任意の配列変数や条件はありません[[ .. ]]。これには位置パラメータがありますが、ここでの比較も機能しないため、$@設定(使用set)はあまり役に立ちません。

だから別の考え方が必要です。この出力で何をしたいのかを把握し、それに応じて行動しなければなりません。

現在のコードを使用すると、次のことができます。

if eb list --all | grep -q develop; then

出力が再度必要で、再度呼び出したくない場合は、eb list --all文字列として変数に保存して後で使用できます。

envs=$(eb list --all)

if printf '%s\n' "$envs" | grep -q develop; then

(注:grep -q developサブストリング「develop」を含むすべての行と一致します。そうでない場合は、次のことができます。grep -q '^develop$'

おすすめ記事