|
1.解决了64位除法问题,calc命令除法和求余操作能计算完全的64位有效值
2.check -e 参数支持操作符两边的串都可转义
3.check 可比较含引号的字符串,及解决最后一个字符是\的问题
引号的问题比较纠结,它既可能是字符串界定符,也可能是普通字符
现在的规则是只有第一字符是引号时,才作为界定符,并必须找对配对的引号
所以 check abc"123\ == abc"123\ 这样的串可以直接比较
在查找配对引号时,忽略 \",不将它当作界定符
WENV set a=abc" 123, 这个含有空格,必须用引号括起来
WENV check "abc\" 123 == "${a!"=\"}" 返回真
但这样又将已经解决的最后字符是\的问题给绕回来了
WENV set a=ab c\, 这个含有空格,必须用引号括起来
WENV set "ab c\" == "${a}" 这个会出错
对含有引号、含有空格、最后字符还可能是\的串比较时尤其麻烦
WENV set a=ab" c\
WENV set "[ab\" c\]" == "[${a!"\"}]",中间的"换成\"避免早退界定符混淆
先用 [] 最后字符可能是\的问题,再用引号允许空格
新的问题是在含引号、空格的串中查找\,不能去找到 " 替换出来的 \"
WENV set -e "\\" <- "[${a!"\"}]"
通过 -e 参数再将 \" 换回去
总之,太纠结了,还有待改善。规则可以慢慢改,主要是测试skip_to的问题,这个函数用的地方太多了,改过后有可能有漏处理的地方。
4.set 命令增加 -e -x -q -tq 参数
-q 参数前切首尾空字符后,同时剪切首尾第一个引号
-tq 将引号当成空字符,再剪切首尾空字符
这两个参数不是很常用,但特殊情况会有用,最好不要与 -x 同时使用,没做针对性处理,可能会与预期不符
-x[=delims[,N]] 将字符串以 delims 为分隔符分割成多段,取第N段(N从0开始)
delims 默认是空格,N 默认 0
5.WENV 添加全局参数 -x (在子命令前)截短命令行(取消 TRUNC_CMD 开关)
WENV [-x[=L]] sub-command
L 默认512,最大1024(命令行缓存为1024,过长会退出)
这个只是简单截短命令行,如果命令行是变量,变量展开后超出512仍然失败
而且 L 还包含子命令所占的字符数
(不喜欢 -l,不好看,容易跟 1,i 搞混,跟set一样用了 -x,剪刀,从某个地方剪断)
cat --locate=[ /TXTSETUP.TXT | echo | WENV -x set -x a=0x
可以直接到得第一个偏移量0x12,中间用echo中转是为了消除 cat 输出的前导空格
[ 本帖最后由 tuxw 于 2010-11-12 16:54 编辑 ] |
|