在一个脚本中用到了 sql执行的定时任务,基本写法是:
SQL=’insert into tbl_a (a,b,c,d) select * from tbl_b’
echo $SQL | mysql -hhost -uuser -ppass db_a
结果在执行过程中echo出来的 * 号 在命令行中直接把当前目录的所有文件列了出来,导致执行的SQL出错
# echo *
10_monthy_user.log 9_month_data.log
加个转义符
# echo \*
*
然后我天真的认为结束了,结果
ERROR at line 1: Unknown command ‘\*’.
在赋值的时候不可取了,那继续尝试
[root@localhost data]# a=’1 * 2 ‘
[root@localhost data]# echo $a
1 10_monthy_user.log 9_month_data.log ?2
[root@localhost data]# a=’1 \* 2 ‘
[root@localhost data]# echo $a
1 \* 2
[root@localhost data]# a=’1 \\* 2 ‘
[root@localhost data]# echo $a
1 \\* 2
[root@localhost data]# a=’1 “*” 2 ‘
[root@localhost data]# echo $a
1 “*” 2
搜了下echo的man用法
-e ? ? enable interpretation of backslash escapes
If -e is in effect, the following sequences are recognized:
\0NNN ?the character whose ASCII code is NNN (octal)
\\ ? ? backslash
\a ? ? alert (BEL)
\b ? ? backspace
\c ? ? suppress trailing newline
\f ? ? form feed
\n ? ? new line
\r ? ? carriage return
\t ? ? horizontal tab
\v ? ? vertical tab
哦呵呵 * 星号的ascii 码是52 所以可以用\052来替代
[root@localhost data]# a=’1 \052 2 ‘
[root@localhost data]# echo -e $a
1 * 2
?目标达成。。。