假如我有字符串 A,
A="米饭 + 爆炒牛肉 + 豉汁肉片 + 蒜蓉芥蓝"
我想过滤它是否含有某个中文字符,比如“牛肉" ,使用
test.sh
#!/bin/bash
set -x
A="米饭 + 爆炒牛肉 + 豉汁肉片 + 蒜蓉芥蓝"
F="牛肉"
if [ `echo "$A" |egrep "$F" ` ] ; then echo "A include $F" ;fi
出现以下错误:
$ ./test.sh
+ A='米饭 + 爆炒牛肉 + 豉汁肉片 + 蒜蓉芥蓝'
+ F=$'\347\211\233\350\202\211'
++ egrep $'\347\211\233\350\202\211'
++ echo '米饭 + 爆炒牛肉 + 豉汁肉片 + 蒜蓉芥蓝'
+ '[' $'\347\261\263\351\245\255' + $'\347\210\206\347\202\222\347\211\233\350\202\211' + $'\350\261\211\346\261\201\350\202\211\347\211\207' + $'\350\222\234\350\223\211\350\212\245\350\223\235' ']'
./test.sh: line 7: [: too many arguments
是不是应该在哪个环境变量设置一下。
你看看咯
另外,确实使用bash的匹配更方便
有时候胜过sed的分组捕获,bash的匹配用起来更简单,也支持分组捕获,结果保存在BASH_REMATCH数组中