shell 引号 转义符 通配符 特殊字符

 
下面内容解释hive -e "" 中为什么用四个反斜杠,而hive-CMD中只用两个反斜杠
 
hive -e "select split('1.2.3.4','\\\\.') from default.dual;"
 
hive> select split('1.2.3.4','\\.') from default.dual;
 
上面两种情况执行结果一样
 

需要注意的是

当然当split包含在 "" 之中时 需要加4个\

如 hive -e "....  split('192.168.0.1','\\\\.') ... "  不然得到的值是null

 
 
shell中引号的使用方法

shell使用引号(单引号/双引号)和反斜线("\")用于向shell解释器屏蔽一些特殊字符.
 
 
shell转义符有三种,不只是 \ 。 单引号、双引号、反斜杠。
‘’(单引号)又叫硬转义,其内部所有的shell 元字符、通配符都会被关掉。注意,硬转义中不允许出现’(单引号)。
“”(双引号)又叫软转义,其内部只允许出现特定的shell 元字符:$用于参数代换 `用于命令代替
\(反斜杠)  又叫转义,去除其后紧跟的元字符或通配符的特殊意义。
 
2. 双引号 ( " " )  解释三种特殊字符  $  
                                     \
                                     `
双引号作用与单引号类似,区别在于它没有那么严格。单引号告诉shell忽略所有特殊字
符,而双引号只要求忽略大多数,具体说,括在双引号中的三种特殊字符不被忽略
$,\,` ,即双引号会解释字符串的特别意思,而单引号直接使用字符串.如果使用双引号将
字符串赋给变量并反馈它,实际上与直接反馈变量并无差别。如果要查询包含空格的字
符串,经常会用到双引号。
howard@0[script]$ x=*
howard@0[script]$ echo $x
hello.sh menus.sh misc.sh phonebook tshift.sh
howard@0[script]$ echo '$x'
$x
howard@0[script]$ echo "$x"
*
这个例子可以看出无引号、单引号和双引号之间的区别。在最后一种情况中,双引号告
诉shell在引号内照样进行变量名替换,所以shell把$x替换为*,因为双引号中不做文
件名替换
,所以就把*作为要显示的值传递给echo。
对于第一种情况需要进一步说明,shell在给变量赋值时不进行文件名替换(这从第三种
情况中也能看出来),各步骤发生的精确次序如下:
shell扫描命令行,把x的值设为星号*;
shell再次扫描命令行,碰到星号*,把它替换成当前目录下的文件清单;
shell启动执行echo命令,把文件清单作为参数传递给echo.
这个赋值的先后次序非常重要:shell先作变量替换,然后作文件名替换,最后把这行处
理为参数
4. 反斜杠 backslash-escaped( \ )
反斜杠一般用作转义字符,或称逃脱字符,linux如果echo要让转义字符发生作用,就要使
用-e选项,且转义字符要使用双引号
echo -e "\n"  explain
反斜杠的另一种作用,就是当反斜杠用于一行的最后一个字符时,shell把行尾的反斜杠
作为续行,这种结构在分几行输入长命令时经常使用
------------------------------------------------------------------------------
grep单双引号的区别:
对于字符串,两者相同
匹配模式也大致相同
但有一些区别非常容易混淆
grep "\\" file        #grep: Trailing backslash(不知原因)
grep '\\' file        #查找‘\’字符
这个和grep本身没有关系,而是和shell有关系,
比如:
grep "\\" file 这个为什么会失败呢?
因为用双引号,shell先把\\转义,就成了\,grep接收到的只有\,\是特殊字符,后面应该跟需
要转义的字符,所以只有一个\就出错了。
如果用双引号,查找一个\,就应该用四个\:
grep "
\\\\" file 这样就对了,这样等同于:
grep '\\' file
第一条命令shell把四个\,转义成2个\传递给grep,grep再把2个\转义成一个\查找
第二条命令shell没转义,直接把2个\传递给grep,grep再把2个\转义成一个\查找
其实grep执行的是相同的命令。shell,然后执行gerp命令。
同 echo "$x"
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值