如何在Bash脚本中按最后一个斜杠分割字符串为两个变量?
在Bash中按最后一个斜杠分割路径字符串
要实现按最后一个/分割路径,用Bash原生的参数扩展就能搞定,不用调用awk、sed这类外部工具,高效又简洁。
核心方法
假设你的路径变量是path_str="Example/Folder/Structure":
- 提取上级路径(对应你要的string1):
这里parent_path="${path_str%/*}"%/*表示从字符串末尾开始,匹配最短的/*模式并删除,也就是砍掉最后一个/及后面的内容。 - 提取最后一段文件夹名(对应你要的string2):
这里folder_name="${path_str##*/}"##*/表示从字符串开头开始,匹配最长的*/模式并删除,也就是砍掉最后一个/及前面的内容。
结合slather脚本的完整示例
针对你处理iOS覆盖率报告的场景,写个完整的脚本片段:
#!/bin/bash # 接收传入的目标路径参数 target_path="$1" # 处理边界情况:如果路径没有斜杠(目标在根目录) if [[ "$target_path" != */* ]]; then parent_dir="." target_folder="$target_path" else parent_dir="${target_path%/*}" target_folder="${target_path##*/}" fi # 切换到上级目录,确保slather能正确找到路径 cd "$parent_dir" || { echo "上级目录不存在"; exit 1; } # 生成指定文件夹的slather覆盖率报告 slather coverage --directory "$target_folder" \ --workspace YourApp.xcworkspace \ --scheme YourAppScheme \ --output-directory coverage-reports
测试验证
输入Example/Folder/Structure时:
parent_dir会得到Example/Foldertarget_folder会得到Structure
如果输入的是根目录下的CoreModule,则parent_dir设为当前目录.,target_folder为CoreModule,完美兼容原来的逻辑。
内容的提问来源于stack exchange,提问作者AApollo
相关产品推荐
相关产品推荐

