shell命令1
grep " " /tmp/1
这个命令比较简单,就是把/tmp/1文件中包含空格的行列出来。
如果我们想先ssh到某台机器上再运行这个shell命令1,
你也许会尝试:
ssh 127.0.0.1 grep " " /tmp/1
但是很快你会发现行不通。
因为ssh拿到的“ ”之后,两个引号就消失了,
然后传递给grep运行的时候,直接就是一个空格,也就相当于没有参数了。
正确的写法应该是将两个需要传给grep的引号用附上转义符,如下
shell命令2
ssh 127.0.0.1 grep "\" \"" /tmp/1
我们知道grep拿到的参数是“ ”,已经没有转义符了,它就是一个空格,
我们再来一层,如果ssh到一台机器然后在ssh到另一台机器,执行shell命令1,那将会是怎么样?
其实也不难,每传递一次参数就会减少一层转义符,
所以我们要把给第二个ssh的参数中的特殊符号全部转移一遍!
shell命令3
ssh 127.0.0.1 ssh 127.0.0.1 grep "\"\\\" \\\"\"" /tmp/1
通过grep监控或查看远端服务器时,可能就会遇到这个问题。
当然如果不用grep到特殊字符,也不用使用引号将有空格的pattern引起来,可以不用理会这点。
如果先将参数传给自己写的脚本,然后在执行上面的shell命令,那也同样需要多一层转义。
匹配任意字符.*
' ', '-','\', '+'等字符在正则表达式中都要转义