bash - 如何将具有多个标志的字符串分配给可在命令中重用的变量?
问题描述
在一个脚本中,我有两个带有基本相同标志的命令,我想避免重复。
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"
但在这种情况下,这是一个字符串,而不是多个标志。我想我需要以某种方式拆分字符串(考虑换行和变量替换)。
最简单的方法是什么?
解决方案
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[@]}"
推荐阅读
- elki - 如何在 Elki 中使用数组而不是 NumberVector
- c# - 更新实体中的集合会引发“无法为表中的标识列插入显式值”
- react-native - 当 redux 重新渲染包含 StackNavigator 的视图时,它会将自身重置为初始屏幕
- php - 如何将 .htaccess 文件中的条件转换为 web.config
- ruby-on-rails - Rails 中的相关内容。用户选择要关联的内容。怎么做?有很多?属于?
- jquery - Difference between desktop and mobile Chrome
- python - How do I have a list accept lowercase in place of capitalized letters in Hangman for a randomized list in Python 3?
- visual-studio - How to compile Qt webengine (5.11) on Windows with proprietary codecs
- react-native - React Native 中的“使用 appParams 运行应用程序”是什么意思?
- matlab - 如何将图像处理 matlab 库添加到 keil