Shell如何单行实现带移除模式的参数替换并设置空值默认值
Shell参数扩展合并实现方案
可以直接通过嵌套参数扩展把前缀移除、空值设默认值两步逻辑合并为单行,无需拆分两次赋值,bash、zsh等绝大多数日常使用的shell环境都支持这种写法。
合并后的完整代码:
URL=example.com # 测试带端口场景时可取消下一行注释 #URL=example.com:8080 PORT=${${URL#*:}:-8080}
执行逻辑
- 内层
${URL#*:}先执行前缀移除操作:匹配URL中第一个:及其之前的所有内容并删除,提取出冒号后的端口字段 - 外层
${<内层结果>:-8080}自动判空:如果内层提取端口的结果为空(即URL没有指定端口的场景,比如示例中URL=example.com的情况),就直接返回默认值8080赋值给PORT - 该写法和你原本拆分两行的实现逻辑完全等价,运行结果没有任何差异
兼容提示:如果需要适配dash这类不支持嵌套参数扩展的严格POSIX标准shell,可以用分号分隔命令的方式写单行,所有POSIX兼容shell都能正常运行:
PORT=${URL#*:}; PORT=${PORT:-8080}
内容的提问来源于stack exchange,提问作者Markus Weigelt
相关产品推荐
相关产品推荐

