Bash grep 不适用于撇号

标签 bash ssh centos centos6

我试图运行这段代码:

lsof | grep "/file/path/"

如果文件有这个标志:

`



我收到一个错误:
syntax error near unexpected token '`'

我试图用 \ 逃避这个标志,但我得到了同样的错误。

操作系统:CentOS 6

最佳答案

` 字符(通常称为“反引号”)由 shell 专门解释,即使被引号包围。

具体来说,`cmd args`意思是“执行命令 cmd args 并用该命令的输出替换反引号的字符串。”如果用引号括起来 -- "`cmd args`" -- 被替换的字符串不会进行分词或路径名扩展。 (这通常是你想要的,所以引用的反引号很常见。)

该语法已被弃用很长时间,但仍被接受。新代码应使用 $(cmd args)反而。如上所述,您通常希望避免对替换文本进行分词和路径名扩展,因此您通常会看到 "$(cmd args)" .

简而言之,如果要将文字反引号放入参数字符串中,则应使用单引号:

lsof | grep '/file/path`s/'

或\-转义反引号:
lsof | grep "/file/path\`s/"

关于Bash grep 不适用于撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24128203/

相关文章:

bash - cd 退出时显示错误并退出

ajax - 当文件由另一个程序写入时,是否可以使用 perl/ajax 逐行读取文件?

cocoa - 使用 NSTask ssh 到另一台计算机

linux - 将多个 ssh key 上传到 vps

linux - 为什么使用 "set var = value"采购脚本会破坏 $@?

ubuntu - 将 spec 文件转换为 debian

bash - awk '{printf "%d ", 49420877107}' 打印错误的数字 2147483647

bash - ksh 和 bash 脚本之间的区别

bash - shell脚本中的 "for i"和 "for i in 1 2 3 4"有什么区别?

ruby - 在 CentOS 6.3 上安装 Rubinius 2.0.0-rc1 - 虽然我安装了它,但它提示没有找到 libyaml