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
相关产品推荐
相关产品推荐

