解决数组展开仅返回首个元素(SC2128)及Flutter Run参数传递问题
问题:Flutter CLI参数存入变量后无法识别多个--dart-define参数
我希望将多个CLI参数存入变量以便后续便捷调用,以下长命令可正常运行但写法繁琐:
flutter run --dart-define=SENTRY_DSN_CLIENT_KEY=${APP1_SENTRY_DSN_CLIENT_KEY} --dart-define=MAPBOX_ACCESS_TOKEN=${APP1_MAPBOX_ACCESS_TOKEN}
但尝试以下两种简洁写法均无效,应用中无法识别第二个--dart-define参数:
flutter run $APP1_DART_DEFINE_FLAGSflutter run "${APP1_DART_DEFINE_FLAGS[@]}"
我的环境变量文件内容:
export APP1_SENTRY_DSN_CLIENT_KEY=... export APP1_MAPBOX_ACCESS_TOKEN=... export APP1_DART_DEFINE_FLAGS="--dart-define=SENTRY_DSN_CLIENT_KEY=${APP1_SENTRY_DSN_CLIENT_KEY} --dart-define=MAPBOX_ACCESS_TOKEN=${APP1_MAPBOX_ACCESS_TOKEN}"
解决方案
核心问题是你用字符串变量存储多参数,而非bash数组。字符串变量会被shell当作单个整体参数解析,导致第二个--dart-define被合并到第一个参数里,Flutter无法识别独立的参数项。
修正步骤:
- 将
APP1_DART_DEFINE_FLAGS定义为bash数组,每个--dart-define作为数组的独立元素:
export APP1_SENTRY_DSN_CLIENT_KEY=... export APP1_MAPBOX_ACCESS_TOKEN=... export APP1_DART_DEFINE_FLAGS=( "--dart-define=SENTRY_DSN_CLIENT_KEY=${APP1_SENTRY_DSN_CLIENT_KEY}" "--dart-define=MAPBOX_ACCESS_TOKEN=${APP1_MAPBOX_ACCESS_TOKEN}" )
- 调用时使用数组的正确展开方式:
flutter run "${APP1_DART_DEFINE_FLAGS[@]}"
这种方式下,shell会将数组的每个元素作为独立CLI参数传递给flutter run,Flutter就能正确识别每一个--dart-define配置了。
内容的提问来源于stack exchange,提问作者Ben Butterworth
相关产品推荐
相关产品推荐

