关于字符的处理一直是一个比较麻烦的事情,尤其是在跨平台的时候,要格外的小心,今天来记录一下自己的一些小经验。
1. 跨平台之间的处理
在不同的平台之间,字符串的传递和处理可能不同,比如在一个平台传入的字符可能可以使用,但是在另一个平台传入执行,可能由于另一个平台的特性,会需要额外的处理。
一个实例便是,在jenkins上的配置文件中,如果变量以","分隔,那变量可能传入时也会附带分号,如果是这种情况,后续就需要对变量单独处理。
2. 本地和远程上的处理
这个和跨平台有些相似之处,一些在本地可以正常运行的脚本,如果传入CI/CD报错,除去环境的问题之外,大概率可能是一些字符的处理不同,这时候就要兼容不同的平台,来保证执行时获取的是最新的可用变量。
3. 特殊字符和命令行的处理
特殊的字符主要有两大类,一类是特殊符号: 单引号,双引号,转义字符等。另一类是超长的字符串: cookie等。这些字符在不同平台上的表现形式是不一样的,需要判断是否需要单独处理。
命令行中主要是换行符。一些平台会自动根据你拼接的命令加入换行符导致运行失败。
4. 累积经验值
说了这几类情况,其实最重要的还是能更合理的应对这些情况,通过累积自己的经验,来更好的培养排查的方向,来更妥善的应对和处理。来说几点常见的方向:
1) 对于命令行失败的情况,一般无外乎两种,一种是平台不支持该命令,另外一种便是这些字符引起的格式问题,导致不识别命令引起失败。
2) 对于跨平台或者本地远程表现不一致的情况,如果没有头绪,也可以优先排查字符的情况是否匹配。
3) 日志的辅助输出。对于可能出现问题的地方,可以增加日志的输出,方便排查。
4) 注意细节的比对。日志的输出并不保险,尤其是一方可能多出单双引号的情况,导致以为是正常的,其实不是。
5) 统一输入输出格式。其实这类问题本质还是格式不统一造成的,比如我们以为输出的是字符串,便没有进行格式化,其实结果并不是预想的,于是出错。
最后,又是继续探索的一天!