Bashで動的結果を持つ動的変数

Bashで動的結果を持つ動的変数

dubdub_count=3

for (( i=1; i<=${dubdub_count}; i++ )); do
  my_apps --ammount=${dubdub_count}
done

プログラムはIPアドレスの例の結果を返します。

app1=10.10.10.1
app2=10.10.10.2
app3=10.10.10.3

これらのIPアドレスは他のサービスに使用されます。以下のようにapiserverコマンドを実行するためにapiserver.sh bashスクリプトを作成しています。

/usr/local/bin/apiserver --dubdub=http://${app1},http://${app2},http://{app3} --master

私のapiserver.shがmy_apps結果の動的結果を追加できるようにしたいです。

dubdub_count=3スクリプトを変更すると、dubdub_count=4 次のように実行できるはずです。

/usr/local/bin/apiserver --dubdub=http://10.10.10.1:8080,http://10.10.10.2:8080,http://10.10.10.3,http://10.10.10.4 --master

dubdub_count=3スクリプトを変更すると、dubdub_count=5 次のように実行できるはずです。

/usr/local/bin/apiserver --dubdub=http://10.10.10.1:8080,http://10.10.10.2:8080,http://10.10.10.3:8080,http://10.10.10.4:8080,http://10.10.10.5:8080 --master

要約質問は、my_appの結果をパラメータに自動的に追加する方法です--dubdub。 my_appが6つのIPアドレスを返すと、my --dubdubも6つのIPアドレスを取得します。 bashスクリプトを手動で編集する必要はありません。

dynamic var in bashstackoverflowでasキーワードを読みましたが、まだ最良の解決策が見つかりません。 my_apps開発者に結果の方法を変更するように助言する必要がありますか?

ベストアンサー1

を追加してhttp://使用し:8080sed一緒にpaste -sd,集めてコンマで区切ることができます。

urllist=$(
  for ... done \
  | cut -d= -f2 \
  | sed 's#.*#http://&:8080#' \
  | paste -sd, -
) # output: http://10.10.10.1:8080,http://10.10.10.2:8080,http://10.10.10.3:8080
/usr/local/bin/apiserver --dubdub="$urllist" --master

cutまたは、1つのコマンドでを実行しsedて一緒にpaste実行しますawk

urllist=$(
  for ... done \
  | awk -F= 'NR>1{printf ","};{printf "http://"$2":8080"}'
) # output: http://10.10.10.1:8080,http://10.10.10.2:8080,http://10.10.10.3:8080
/usr/local/bin/apiserver --dubdub="$iplist" --master

おすすめ記事