You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中如何替换数组元素 适配Homebrew应用安装校验逻辑

方案可行性结论

仅通过处理原数组、替换/移除短横线的方案在你当前的使用场景下完全可行,不需要额外定义映射数组,用Bash内置的字符串处理语法即可实现,不会影响原有Homebrew cask的安装逻辑。
注意这个方案只适合cask标识名和实际app名称差异仅为短横线的场景,如果后续遇到名称差异更大的应用(比如cask名iterm2对应实际应用iTerm.app),再改用映射表方案即可。

具体实现代码

核心是用Bash原生的全局字符串替换语法:${变量名//匹配内容/替换内容},你需要在拼接应用路径前,先把cask名里的短横线做对应处理,不需要修改原数组里的cask标识,不影响后续brew install调用。
针对你提到的两个应用实际名称不含短横线、短横线对应位置为空格的默认安装情况,把短横线替换为空格即可(Mac默认APFS文件系统大小写不敏感,全小写路径也能正确匹配实际应用),修正后的完整代码如下:

declare -a applications=(Spotify Discord Franz Rectangle visual-studio-code VLC microsoft-excel)

for app_cask in "${applications[@]}"
do
  # 将cask名中的短横线替换为空格,匹配/Applications下的实际app名称
  # 如果你的实际app名是直接去掉短横线无空格,就把下面替换规则里的空格删掉,写成"${app_cask//-/}"
  app_install_name="${app_cask//-/ }"
  app_path="/Applications/${app_install_name}.app"

  if [ -d "$app_path" ]; then
    echo "${app_cask} is installed"
    appstatus="Installed"
  else
    echo "Not found at path: ${app_path}"
    appstatus="${app_cask} not installed - installing now"
    # 修正原脚本里brew cask的错误写法,新版Homebrew要用--cask参数
    brew install --cask "$app_cask"
  fi
  echo "$appstatus"
done
补充说明
  • 原脚本里的brew install cask "$i"是错误语法,Homebrew 2.7版本之后已经废弃了brew cask的独立命令写法,统一用brew install --cask安装cask应用,上面代码已经修正。
  • 如果后续新增的应用存在cask名和实际安装名差异不止短横线的情况,直接在数组外单独做个小映射表补全特殊项即可,不需要全量维护映射关系,维护成本很低。

内容的提问来源于stack exchange,提问作者Jamie Al

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:15:43