shell脚本中的星号

在一个脚本中用到了 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

?目标达成。。。

shell脚本中的星号

相关文章:

你感兴趣的文章:

标签云: