首页 > 解决方案 > 如何将具有多个标志的字符串分配给可在命令中重用的变量?

问题描述

在一个脚本中,我有两个带有基本相同标志的命令,我想避免重复。

if ...
  gcloud pubsub subscriptions create  mysub \
    --topic mytopic
    --push-endpoint="$SUBSCRIPTION_ENDPOINT" \
    --ack-deadline=$ACK_DEADLINE \
    --max-delivery-attempts=$MAX_DELIVERY_ATTEMPTS \
    --dead-letter-topic=$DEADLETTER_TOPIC \
    --min-retry-delay=$MIN_RETRY \
    --max-retry-delay=$MAX_RETRY  
else
  gcloud pubsub subscriptions update mysub
   -push-endpoint="$SUBSCRIPTION_ENDPOINT" \
    --ack-deadline=$ACK_DEADLINE \
    --max-delivery-attempts=$MAX_DELIVERY_ATTEMPTS \
    --dead-letter-topic=$DEADLETTER_TOPIC \
    --min-retry-delay=$MIN_RETRY \
    --max-retry-delay=$MAX_RETRY
fi


FLAGS="--push-endpoint=$SUBSCRIPTION_ENDPOINT \
    --ack-deadline=$ACK_DEADLINE \
    --max-delivery-attempts=$MAX_DELIVERY_ATTEMPTS \
    --dead-letter-topic=$DEADLETTER_TOPIC \
    --min-retry-delay=$MIN_RETRY \
    --max-retry-delay=$MAX_RETRY"

但在这种情况下,这是一个字符串,而不是多个标志。我想我需要以某种方式拆分字符串(考虑换行和变量替换)。

最简单的方法是什么?

标签: bashshell

解决方案


if ...; then
  COMMAND_PREFIX=(gcloud pubsub subscriptions create mysub)
else
  COMMAND_PREFIX=(gcloud pubsub subscriptions update mysub)
fi

COMMAND=(
  "${COMMAND_PREFIX[@]}"
  "--push-endpoint=$SUBSCRIPTION_ENDPOINT"
  "--ack-deadline=$ACK_DEADLINE"
  "--max-delivery-attempts=$MAX_DELIVERY_ATTEMPTS"
  "--dead-letter-topic=$DEADLETTER_TOPIC"
  "--min-retry-delay=$MIN_RETRY"
  "--max-retry-delay=$MAX_RETRY")

"${COMMAND[@]}"

推荐阅读